替换空格
题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为“We Are Happy”.则经过替换之后的字符串为“We%20Are%20Happy“。
解题思路
其实这题比较简单,只需要对应好位置,就可以得出答案,时间上最小应该就是o(n)。但是情况上有两种可能,需要进行说明一下。
-
能在原来的字符串数组上进行改动。能在原来数组上进行改动,那么只要找好最终数组的长度,然后从后向前找对应的位置就行。(为什么从后向前?因为从前向后,前面的遍历的就改变后面遍历得情况,而从后向前则不会)
如:原来字符串为”We Are Happy“,长度为12(在java下没有考虑末尾的‘\0‘,如果是c等可能需要考虑),有两个空格,则最终的长度为14。然后我设p1=11,p2=13,然后如下:
- array[p1]!=’ ',array[p2] = array[p1] ,接着(p2–,p1–)
- array[p1]==’ ‘,array[p2]=‘0’,array[p2-1]=‘2’,array[p2-2]=’%’,接着(p2-=3,p–)
-
不能在原来得数组上进行改动。不能在原来数组上进行改动,那么直接new一个最终长度得数组,然后从前向后对原数组遍历,确定位置就行。
如:原来字符串为”We Are Happy“,长度为12(在java下没有考虑末尾的‘\0‘,如果是c等可能需要考虑),有两个空格,则最终的长度为14。我重新创建一个长度为14字符数组,设p1=0,p2=0,然后如下:
- array[p1]!=’ ',Newarray[p2] = array[p1] ,接着(p2++,p1++)
- array[p1]==’ ‘,Newarray[p2]=’%’,array[p2+1]=‘2’,array[p2+2]=’%’,接着(p2+=3,p++)
代码实现
public class Solution {
public String replaceSpace(StringBuffer str) {
if(str==null)
return null;
int fianl_length = str.length();
for(int i=0;i<str.length();i++){
if(str.charAt(i)==' '){
fianl_length+=2;
}
}
char [] res = new char[fianl_length];
int p1 =0;
for(int i=0;i<str.length();i++){
if(str.charAt(i)==' '){
res[p1]='%';
res[p1+1]='2';
res[p1+2]='0';
p1+=3;
}else{
res[p1] = str.charAt(i);
++p1;
}
}
return String.valueOf(res);
}
}
我采用的是第二种方法,因为给的是StringBuffer
,也不像字符串数组,所以采用第二种了。
总结
这是《剑指offer》上的一题,这题比较简单,无需多说。