题目:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路:如果从字符串头部开始遍历,每个遇到一个空格,都需要变成“%20”,同时还需要把空格后的所有字符往后移动两位,复杂度太高。遍历旧数组两次,第一次找出空格的个数,确定新字符串的总长度。第二次从旧字符串的末尾往头部遍历,从新字符串的末尾开始插入元素,用i、j分别记录旧字符串和新字符串的位置。如果遇到空格,新字符串插入‘%20’,且j-=2。否则插入旧字符串当前字符,i--,j--。
代码如下:
public class Solution {
public String replaceSpace(StringBuffer str) {
if (str==null||str.length()==0){
return "";
}
int oldLen = str.length();
int newLen=oldLen;
for (int i = 0; i < oldLen; i++) {//确定新字符串的长度
if (str.charAt(i)==' '){
newLen+=2;
}
}
char[] chars=new char[newLen];//创建newLen长度的新字符数组
for (int i = oldLen-1,j=newLen-1; i >=0; i--) {
if (str.charAt(i)==' '){
chars[j]='0';
chars[j-1]='2';
chars[j-2]='%';
j-=3;
}else {
chars[j]=str.charAt(i);
j--;
}
}
return new String(chars);
}
}