面试题4:请实现一个函数,把字符串中的每一个空格替换成"%20"。例如输入“We are happy.”,则输出“We%20are%20happy.”面试
从前日后替换。bash
缺陷:时间复杂度是 O(n^2)。由于每次都得移动空格后面全部的字符串,效率低下。app
从后往前替换。函数
优势:时间复杂度是 O(n)。每次替换只须要操做当前字符。ui
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();
}
复制代码