Le lien de la question est
Le Code que j'ai écrit
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(); }}

Mais je ne sais pas pourquoi la performance est si mauvaise,Pas pour l'épissage fréquent des chaînesStringBuilderBonne performance??
Comment optimiser mon plan actuel?
StringBuilder De insert La complexité est n, Donc vous traversez chaque insertion Tout StringBuilder String


Les performances ne sont pas aussi bonnes que vous le pensez .Il est recommandé d'utiliser StringBuilder De append Méthodes
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();}
J'ai soumis les résultats suivants:

C'est juste relatif. StringBufferMeilleure performance, Mais ça prend du temps.
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; }};
Vous pouvez vous référer à ceci
Si ça aide,Adopter et soutenir,Merci beaucoup..
Une vague de questions
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);
