面試題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();
}
複製代碼