Opa*_*pal 4 java arrays string char
我对Gayl Laakmann McDowell第5版Cracking The Code Interview一书中的编程问题提出了疑问.
我不确定我的答案有什么问题?它与书中给出的答案有很大不同.
public String replace(String str){
String[] words = str.split(" ");
StringBuffer sentence = new StringBuffer();
for(String w: words){
sentence.append("%20");
sentence.append(w);
}
return sentence.toString();
}
Run Code Online (Sandbox Code Playgroud)
书中的问题说:
注意:如果在Java中实现,请使用字符数组,以便您可以就地执行此操作.
它还说你输入的char数组足够长,可以保存修改过的字符串.
通过使用split并StringBuffer使用额外的O(n)空间.这就是为什么你的答案变化很大而且不正确(除了增加额外的"%20").
在这个循环中,程序%20在每个单词之前添加:
Run Code Online (Sandbox Code Playgroud)for(String w: words){ sentence.append("%20"); sentence.append(w); }
这将产生不正确的结果,例如a b它会给出%20a%20b.
有一个更简单的解决方案:
public String replace(String str) {
return str.replaceAll(" ", "%20");
}
Run Code Online (Sandbox Code Playgroud)
或者,如果你真的不想使用.replaceAll,那么写这样:
public String replace(String str) {
String[] words = str.split(" ");
StringBuilder sentence = new StringBuilder(words[0]);
for (int i = 1; i < words.length; ++i) {
sentence.append("%20");
sentence.append(words[i]);
}
return sentence.toString();
}
Run Code Online (Sandbox Code Playgroud)