問題描述:
請實現一個函數,將一個字符串中的空格替換成“%20”。例如,當字符串為We Are Happy.則經過替換之后的字符串為We%20Are%20Happy。
基本思路:
逆序替換,降低時間復雜度
實現方案:
- String一旦初始化,無法改變。
- 使用StringBuffer,是因為牛客網的模板。
- 實際使用中,單線程建議是用StringBuilder,因其無鎖,效率高。
- 多線程中,使用StringBuffer。
- 兩者的內置函數是相同的
思考:
- 在原有字符串上更改,還是新建字符串(原有的話,需要重新設置長度setLength())
- 不考慮使用現有replace()
代碼:
public static String replaceSpace(StringBuffer str){
int length = str.length();
int spacenum = 0;
//統計空格字符個數
for(int i=0;i<length;i++){
if(str.charAt(i) == ' ')
spacenum++;
}
int lengthNew = length + spacenum*2;
str.setLength(lengthNew);
int index = length-1;
int indexNew = lengthNew-1;
for(;index>=0;index--){
if(str.charAt(index) == ' '){
str.setCharAt(indexNew--, '0');
str.setCharAt(indexNew--, '2');
str.setCharAt(indexNew--, '%');
}
else{
str.setCharAt(indexNew--, str.charAt(index));
}
}
return str.toString();
}