问题描述:
请实现一个函数,将一个字符串中的空格替换成“%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();
}