面试题4:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”,则输出“We%20are%20happy.”
思路分析
- brute force
从前往后替换。
缺陷:时间复杂度是 O(n^2)。因为每次都得移动空格后面所有的字符串,效率低下。
- 最优解
从后往前替换。
优点:时间复杂度是 O(n)。每次替换只需要操作当前字符。
public static String replaceSpace(StringBuffer str) {
if(str == null) {
return null;
}
int spaceNum = 0;
int oldIndex = str.length() - 1;
for(int i=0; i<str.length(); i++) {
if(str.charAt(i) == ' ') {
spaceNum ++;
}
}
int newLength = str.length() + 2*spaceNum;
int newIndex = newLength - 1;
str.setLength(newLength);
while(oldIndex >= 0 && oldIndex < newLength){
if(str.charAt(oldIndex) == ' '){
str.setCharAt(newIndex --, '0');
str.setCharAt(newIndex --, '2');
str.setCharAt(newIndex --, '%');
} else {
str.setCharAt(newIndex --, str.charAt(oldIndex));
}
oldIndex --;
}
return str.toString();
}
