题目:
请实现一个函数,将一个字符串中的每个空格替换成“%20”。
例如,当字符串为We Are Happy.
则经过替换之后的字符串为We%20Are%20Happy。
思路:
- 首先就不考虑使用自带的replace函数了,不然没有意义;开辟额外空间也可以做,比如用个StringBuilder在遍历判断的同时来拼接字符即可。
- 这里使用in-place方法来实现。
- 如果不开辟新的字符串,我们可以先计算出空格的数量,逆序遍历字符串,将空格后的字符整体后移两位,在前面补上%20(不顺序替换是因为那样每遇到一个空格都要整体移动后面所有的字符,操作更多更耗时,逆序只需要移动一次)
代码:
public class Solution {
public String replaceSpace(StringBuffer str) {
if(str==null) return null;
char[] result = str.toString().toCharArray();
int count = 0;
for(char c :result){
if(c==' ') count ++;
}
// 扩容需要的大小
str.setLength(count*2+str.length());
for(int i = result.length-1;count>0;i--){
if(result[i]==' '){
count--;
str.setCharAt(i+2*count,'%');
str.setCharAt(i+2*count+1,'2');
str.setCharAt(i+2*count+2,'0');
}else{
str.setCharAt(i+2*count,result[i]);
}
}
return str.toString();
}
}