我写的代码
class Solution {
public String addSpaces(String s, int[] spaces) {
StringBuilder stringBuilder = new StringBuilder(s);
int c = 0;
for (int v : spaces) {
stringBuilder.insert(v + c++, ' ');
}
return stringBuilder.toString();
}
}
但是不知道为什么性能很差,不是说频繁的字符串拼接用StringBuilder性能好吗?
我现在的方案怎么优化呢
StringBuilder 的 insert 复杂度是 n,所以你每次插入都要遍历一次 整个 StringBuilder 字符串
性能并不如你想象的好。建议改用 StringBuilder 的 append 方法
public String addSpaces(String s, int[] spaces) {
StringBuilder stringBuilder = new StringBuilder();
int p1 = 0, p2 = 0, len = s.length(), n = spaces.length;
while (p1 < len) {
if (p2 < n && p1 == spaces[p2]) {
stringBuilder.append(' ');
p2++;
}
stringBuilder.append(s.charAt(p1++));
}
while (p2++ < n) {
stringBuilder.append(' ');
}
return stringBuilder.toString();
}
我提交了下测试结果为
它只是相对StringBuffer性能更好,但还是很耗时的
class Solution {
public:
string addSpaces(string s, vector<int>& spaces) {
string ans;
ans.reserve(s.size()+spaces.size());//预开辟空间
int i = 0, j = 0, n = spaces.size();
while(i < n)
{
while(j < spaces[i])
ans.push_back(s[j++]);
ans.push_back(' ');
i++;
}
while(j < s.size())
ans.push_back(s[j++]);
return ans;
}
};
如有帮助,采纳支持一下,谢谢。
刷了一波题
char[] chars = s.toCharArray();
char[] result = new char[s.length() + spaces.length];
int sp = 0,index = 0;
for(int i=0;i<chars.length;i++){
if(sp < spaces.length && spaces[sp] == i){
result[index++] = ' ';
sp++;
}
result[index++] = chars[i];
}
return new String(result);