替换空格
题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路
1. 第一思路repalceAll
return str.toString().replaceAll(" ","%20");
错误思路:出题者的想法是需要我们在原地址上进行改变,不是创建一个新地址的String。
2.从尾部开始处理
数出空格个数,从后往前移动 ,需要注意空格个数。
We are happy
We%20are%20happy
观察发现,y向后的移动位数为(y之前的空格数)*2
e向后移动的位数为(e之前的空格数)* 2
所以需要先统计出空格数,然后根据当前空格数,
确定需要移动位数,空格的情况移动的位数所需的空格数就不必包含本身了。
比如倒数第一个空格向后移动的位数为它之前空格数*2,然后该位置需要替换为%, 之后依次2,0
public class Solution {
public String replaceSpace(StringBuffer str) {
int oldLen = str.length();
int gaps= 0;
for(int i = 0; i < oldLen; i++){
if(str.charAt(i) == ' '){
gaps++;
}
}
int newLen = oldLen + gaps*2;
str.setLength(newLen);
for(oldLen--,newLen--;oldLen>=0&&newLen>=0&&oldLen<newLen;oldLen--){
if(str.charAt(oldLen) !=' '){
str.setCharAt(newLen,str.charAt(oldLen));
newLen--;
}else{
str.setCharAt(newLen,'0');
newLen--;
str.setCharAt(newLen,'2');
newLen--;
str.setCharAt(newLen,'%');
newLen--;
}
}
return str.toString();
}
}