替换空格(剑指offer)
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解法:首先计算出有多少个空格从而得出新字符串的长度,设定两个标志分别指向原字符串结尾和新字符串结尾,老标志从后往前移动,依次从老字符串结尾一个一个把字符复制给新字符串,复制一次两个标志都向前移动一个;当碰到空格时,老往前移动一个,新则依次添加 ‘0’ ‘2’ '%'并往前移动,到最后两个标志相遇整个字符串就替换完成。(这样反向替换时间复杂度O(n)很快)
public class Solution {
public String replaceSpace(StringBuffer str) {
int blank = 0;
for(int i=0;i<str.length();i++){
if(str.charAt(i)==' '){
blank++;
}
}
int oldpos = str.length() - 1;
int newpos = str.length() + blank*2 -1;
str.setLength(str.length() + blank*2);
while(oldpos!=newpos){
if(str.charAt(oldpos)!=' '){
str.setCharAt(newpos,str.charAt(oldpos));
oldpos--;
newpos--;
}else{
oldpos--;
str.setCharAt(newpos,'0');
newpos--;
str.setCharAt(newpos,'2');
newpos--;
str.setCharAt(newpos,'%');
newpos--;
}
}
return str.toString();
}
}