思路及其优缺点
- 开辟String类或者Stringbuild,直接添加; 缺点在于增加了空间复杂度,优点思路简单,编程简单
- 直接在StringBuffer上修改,StringBuffer(StringBuild)本质上是一个数组,首先扩充数组,从后往前把字符复制到后面。但是需要统计空格数,所以需要遍历两次数组,时间复杂度换来了空间复杂度。另外一个缺点编程代码更长,考虑更多
代码
开辟新数组
public class Solution {
public String replaceSpace(StringBuffer str) {
String res="";
for(int i=0;i<str.length();i++){
if(str.charAt(i)==' '){
res+="%20";
}else{
res+=str.charAt(i);
}
}
return res;
}
}
直接替换
public class Solution {
public static String replaceSpace(StringBuffer str){
// 保存当前长度,计算扩充后的长度
int len = 0, tempLen = str.length();
for(int i = 0; i < str.length(); i++){
if(str.charAt(i) == ' '){
len += 3;
}else{
len += 1;
}
}
//扩充数组
str.setLength(len);
len--; //数组下标从0开始,最后一个元素是len-1
// System.out.println(len);
// System.out.println(tempLen);
// 移动元素,从后往前把字符复制到后面,
// 这里还可以优化,即复制完第一个空格就可以终止循环了
for(int i = tempLen-1; i >= 0; i--){
if(str.charAt(i) == ' '){
str.setCharAt(len, '0');
len--;
str.setCharAt(len, '2');
len--;
str.setCharAt(len, '%');
len--;
}else{
str.setCharAt(len, str.charAt(i));
len--;
}
}
return str.toString();
}
}