Leetcode Java_StringBuilder

Yake1965 2022-01-07 20:29:03 阅读数:789

leetcode java_stringbuilder java stringbuilder

686. 重複疊加字符串匹配

Leetcode
如果 a 不是 b 的子串並且 b 由 a 的前後兩部分組成,則只需要兩個 a 即可。
如:“abc” “ca” -> “abcabc” 即 x + 1,此時 x = 1
如果 a 是 b 的子串並且 b 的兩端(或一端)可以組成 a,那麼只需要最多拆分一個 a。
如:“abc” “abcabc” 不用拆分 a ; “abc” “cabca” b 兩端拆分一個 a。即 x,此時 x >= 1

否則的話返回 -1

class Solution {

public int repeatedStringMatch(String a, String b) {

// 剪枝 b 中包含了不在 a 中的字符,返回 -1 
// for (int i = 0; i < b.length(); i++){

// if (a.indexOf​(b.charAt(i)) == -1) return -1;
// }
boolean[] exist = new boolean[26];
for (char ch : a.toCharArray()) exist[ch - 'a'] = true;
for (char ch : b.toCharArray()) if (!exist[ch - 'a']) return -1;
int x = (int)Math.ceil((double)b.length() / a.length());
if (a.repeat​(x).contains(b)) return x;
if (a.repeat​(x + 1).contains(b)) return x + 1;
// StringBuilder sb = new StringBuilder();
// sb.append(a.repeat​(x));
// if (sb.indexOf(b) > -1) return x;
// sb.append(a);
// if (sb.indexOf(b) > -1) return x + 1;
return -1;
}
}

2109. 向字符串添加空格

Leetcode

class Solution {

public String addSpaces(String s, int[] spaces) {

// 方法一:String + ,超時
// String res = s.substring(0, spaces[0]);
// int n = spaces.length;
// for (int i = 1; i < n; i++){

// res += " " + s.substring(spaces[i - 1], spaces[i]);
// }
// res += " " + s.substring(spaces[n - 1]);
// return res;
// 方法二:改成 StringBuilder 
// int n = spaces.length;
// StringBuilder sb = new StringBuilder(s.substring(0, spaces[0]));
// for (int i = 1; i < n; i++){

// sb.append(" ");
// sb.append(s.substring(spaces[i - 1], spaces[i])); 
// }
// sb.append(" ");
// sb.append(s.substring(spaces[n - 1]));
// return sb.toString();
// 方法三:逆序 單個字符加入
int k = spaces.length - 1, n = s.length() - 1;
StringBuilder sb = new StringBuilder();
for(int i = n; i >= 0; i--){

sb.append(s.charAt(i));
if(k >= 0 && i == spaces[k]){

sb.append(" ");
--k;
}
}
return sb.reverse().toString();
}
}

481. 神奇字符串

Leetcode
知識點: StringBuilder, charAt, append, repeat.

class Solution {

public int magicalString(int n) {

// “1221121221221121122 ......”
StringBuilder sb = new StringBuilder("122");
String end = "1"; // 1 和 2 交替
for (int i = 2; sb.length() < n; i++){
 // 從第三個數開始生成 
int num = sb.charAt(i) - '0';
sb.append(end.repeat(num));
end = (end == "2") ? "1" : "2";
}
int res = 0;
for (int i = 0; i < n; i++) {

if (sb.charAt(i) == '1') res++;
}
return res;
}
}
版权声明:本文为[Yake1965]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201072029033251.html