将一个字符串中的空格替换成 "%20"。
Input:
"We Are Happy"
Output:
"We%20Are%20Happy"
这道题第一眼看好简单啊,直接遍历然后替换空格就好了啊, 唯一要注意是参数StringBuffer形式
public class Solution {
public String replaceSpace(StringBuffer str) {
String res="";
for(int i=0;i<str.length();i++){
if(str.charAt(i)==' ')
res += "%20";
else
res += str.charAt(i);
}
return res;
}
}
看了牛客网答案有的人从后往前做,不明白为什么要复杂化,看了说明,是考虑到在 原字符串上做替换。这样的话从后往前只需要移动一次比较简单。
从前往后替换,后面的字符要不断往后移动,要多次移动,所以效率低下
从后往前,先计算需要多少空间,然后从后往前移动,则每个字符只为移动一次,这样效率更高一点。
我的答案:要注意从后往前下标从length-1开始
public class Solution {
public String replaceSpace(StringBuffer str) {
int space_num = 0;
int old_length = str.length();
for(int i=0;i<old_length;i++){
if(str.charAt(i)==' ')
space_num++;
}
int new_length = old_length+2*space_num;
int j= new_length-1;
str.setLength(new_length);
for(int i=old_length-1;i>=0;i--){//这里别人还加了一个i<=j的条件,但是我觉得不必要
if(str.charAt(i)==' '){
str.setCharAt(j--,'0');
str.setCharAt(j--,'2');
str.setCharAt(j--,'%');
}
else
str.setCharAt(j--,str.charAt(i));
}
return str.toString();
}
}