题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
- 书上的思路:时间复杂度为O(n)
首先遍历一次字符串,统计出字符串中空格的总数,从而计算替换之后的字符串总长度=原来长度+2*空格总数。
从字符串的后面开始复制和替换:准备两个指针p1和p2,p1指向原始字符串末尾,p2指向替换之后的字符串末尾。
在当前字符串替换:
public static String replaceSpace(StringBuffer str) {
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&&indexOld<indexNew;--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();
}
新开辟了一个字符串:
public String replaceSpace(StringBuffer str) {
if(str==null){
return null;
}
StringBuilder newStr = new StringBuilder();
for(int i=0;i<str.length();i++){
if(str.charAt(i)==' '){
newStr.append('%');
newStr.append('2');
newStr.append('0');
}else{
newStr.append(str.charAt(i));
}
}
return newStr.toString();
}