题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
代码:
自己写的:
public class Solution {
public String replaceSpace(StringBuffer str) {
if(str == null) return null;
if(str.length() == 0) return "";
StringBuffer sb = new StringBuffer();
int len = str.length();
for(int i = 0; i < str.length();i++){
if(str.charAt(i) == ' '){
str.delete(i,i+1);
str.insert(i,"%20");
}
}
return str.toString();
}
}
参考别人的:效率高
思路:
1.统计空格个数count
2.设置新的字符串长度newlen=原长度+2*count;
3.设置两个指针,indexold和indexnew,分别指向旧数组末尾和新数组末尾,从后向前遍历。有两种情况:
1).indexold指向的元素如果是非空格,则移动到indexnew指向位置,并且indexnew向前移动一格(indexold也是);
2).indexnew指向的元素如果是空格,则使用“%20”替换。
public class Solution {
public String replaceSpace(StringBuffer str) {
int count = 0;
for(int i = 0;i < str.length();i++){
if(str.charAt(i) == ' ')
count++;
}
int indexold = str.length()-1;
int newlen = str.length()+2*count;
int indexnew = newlen-1;
str.setLength(newlen);
for(;indexold >=0 && indexold < newlen;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();
}
}