向字符串添加空格算法调优

CSDN问答 2021-12-30 12:00:34 阅读数:91

算法 字符 字符串 添加 空格

问题链接是

我写的代码

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(); }}

img

但是不知道为什么性能很差,不是说频繁的字符串拼接用StringBuilder性能好吗?

我现在的方案怎么优化呢




采纳答案:

StringBuilder 的 insert 复杂度是 n,所以你每次插入都要遍历一次 整个 StringBuilder 字符串

img

img

性能并不如你想象的好。建议改用 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();}

我提交了下测试结果为

img



其他答案2:

它只是相对StringBuffer性能更好,但还是很耗时的


其他答案3:

其他答案4:

刷了一波题

 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);

img

版权声明:本文为[CSDN问答]所创,转载请带上原文链接,感谢。 https://ask.csdn.net/questions/7619941