请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
这种替换问题要考虑是否会覆盖原字符串,若是在源字符串上直接替换。
看到这个问题我觉得很多人都会想到直接从头开始替换,即遇到空格就将其替换为%20,每次都要将空格后的字符后移两个字节。这种解法的时间复杂度为O(n^2)!!!
另外一种较好的解法是从后往前替换,具体做法是从头遍历计算所有空格数,计算出总的长度。 该解法的前提条件是若在源字符串上替换就要求源字符串有足够的空间来容纳新的字符串。时间复杂度为O(n)!!!
解决办法一:利用replace函数
将str转为字符串后调用replace方法,将空格转为“%20”即可。需要注意的是replace方法调用的结果是返回值类型为String的结果而非void。
public class Solution {
public String replaceSpace(StringBuffer str) {
return str.toString().replace(" ", "%20");
}
}
解决办法二:利用StringBuilder来判断并append一个新的结果
char index = str.charAt(i);利用这个方法来遍历str的每一个字符并用一个新的sbuilder来接收每一个字符,遇到空格就在后面append"%20",最后返回sbuilder.toString();
public class Solution {
public String replaceSpace(StringBuffer str) {
StringBuilder sbuilder = new StringBuilder();
for(int i=0;i<str.length();i++){
char index = str.charAt(i);
if(index == ' '){
sbuilder.append("%20");
}else{
sbuilder.append(index);
}
}
return sbuilder.toString();
}
}