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 newlength=str.length()+space*2;
int oldindex=str.length()-1;
int newindex=newlength-1;
str.setLength(newlength);
for(;oldindex>=0 && oldindex<=newindex;oldindex--){
if(str.charAt(oldindex)==' '){
str.setCharAt(newindex--,'0');
str.setCharAt(newindex--,'2');
str.setCharAt(newindex--,'%');
}else{
str.setCharAt(newindex--,str.charAt(oldindex));
}
}
return str.toString();
}
}
题目是替换字符串,而不是新建一个字符串,需要扩展原字符串进行替换。
替换的时候,如果从前往后替换,每次都需要挪动后面的所有字符。所以先从前往后计算一遍空格数量,扩展字符串后再从后向前替换。这里用了newindex和oldindex两个索引,一个指向原字符串一个指向扩展后的位置。注意第二个for循环中&& oldindex<=newindex,当从后往前索引到没有空格的时候此时oldindex>newindex,不需要再替换了。