问题链接是
我写的代码
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);
