题目:
请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“we are happy”,则输出“we20%are20%happy”。
思路:拿到这个题目最好想到的解决方法就是从头开始遍历,遇到空格就替换,然后把后面的字符往后移,可是这样时间复杂度就上去了O(n^2)。另外一种方法,就是从后向前替换空格。我们首先遍历一遍字符串得到空格的数目,字符串原来的数目+空格的数目*2便得到了新的字符串的长度。两个指针,一个指向新字符串的末尾,另一个指向旧字符串的末尾,更新二者即可实现替换空格。
代码如下:
时间复杂度为O(n)
public class Solution {
public String replaceSpace(StringBuffer str) {
int spaceNum=0
//计算空格的个数
int spaceNum=0;
for(int i=0;i<str.length();i++){
if(str.charAt(i)==' ')
spaceNum++;
}
//从后向前依次替换
int indexOld=str.length()-1;//原来字符串的最后一个索引
int newLength=str.length()+spaceNum*2;//新字符串的长度
int indexNew=newLength-1;//新字符串的最后一个索引
str.setLength(newLength);
for(;indexOld>=0&&indexNew<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();
}
}