題目描述
請實(shí)現(xiàn)一個函數(shù)誓篱,將一個字符串中的空格替換成“%20”瓮栗。例如敷矫,當(dāng)字符串為We Are Happy.則經(jīng)過替換之后的字符串為We%20Are%20Happy础芍。
- 書上的思路:時間復(fù)雜度為O(n)
首先遍歷一次字符串,統(tǒng)計(jì)出字符串中空格的總數(shù)神汹,從而計(jì)算替換之后的字符串總長度=原來長度+2*空格總數(shù)庆捺。
從字符串的后面開始復(fù)制和替換:準(zhǔn)備兩個指針p1和p2,p1指向原始字符串末尾屁魏,p2指向替換之后的字符串末尾滔以。
在當(dāng)前字符串替換:
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();
}