题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
在本例中用到setCharAt(),CharAt()两个方法。截图如下:
setCharAt()
charAt()
分析
难点
1.从前往后移动的话,后面的字符需要不断往后面移动,多次移动导致效率低下。
2.从后往前的话,可以先计算需要多少空间,然后从后往前移动,则每个字符只为移动一次,这样效率更高。
public class Solution {
public String replaceSpace(StringBuffer str) {
int space = 0;//空格数
for(int i=0;i<str.length();i++){
if(str.charAt(i)==' ')
space++;
}
int indexold = str.length()-1;//indexold为替换前str下标
int newlength = str.length() + space*2;//indexnew是把空格换成%20
int indexnew = newlength - 1;//新下标
str.setLength(newlength);//使str的长度扩大到转换为20%之后的长度,放置下标越界
if(;indexold>=0 && indexold<newlength;--indexold){
if(str.charAt(indexold) == ' '){
str.setCharAt(indexnew--,'0');
str.setCharAt(indexnew--,'2');
str.setCharAt(indexnew--,'%');
}else{
str.setCharAt(indexnew--, str.charAt(indexold));
}
}
return str.toString();
}
}