题目:请实现一个函数,把字符串中的个空格替为"%20".例如输入"we are happy",则输出"we%20are%20happy"
------------------------------------------------
思路:
逆序替换,降低时间复杂度
---------------------------------
基本方案:
- String一旦初始化,无法改变。
- 使用StringBuffer,是因为牛客网的模板。
- 实际使用中,单线程建议是用StringBuilder,因其无锁,效率高。
- 多线程中,使用StringBuffer。
- 两者的内置函数是相同的
一般方案代码:
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();
}
而我在判断条件
index>=0上加以改进,由于考虑到像本题的测试案例,在we之后一个空格之前的char不需要移动,因此倘若判断条件为大于等于0时,则会
浪费时间,因此我们把判断条件改为index<indexNew;这样在判断循环到e的时候就会停止,测试案例的第一个空格离开头越远,这个小改进的优越性越明显;
并且我对空格在开头的" we are happy"进行测试,结果为%20we%20are%20happy,正确。