剑指offer第二题
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 说来你们可能不信这是我刷剑指offer最简单的一个题
解题思路
其实吧我看这个题的没有想到可以直接用java的方法,然后用了java的方法直接return就通过了,哎,怪不得有人说java程序员算法不好呢。 然后这个的使用算法的解法其实有很多,我这里说一种普通的解法,就是通过char类型的数组来解决问题,遇到空格将其替换,其实可以使用一个很有名的算法,但是吧我没有看懂,等到后面需要用的时候在学吧,我在这里先解决了再说。
代码详情
public class Second {
public static void main(String
[] args
) {
Second second
=new Second();
StringBuffer stringBuffer
=new StringBuffer("We Are Happy");
String s
= second
.replaceSpaceByOne(stringBuffer
);
System
.out
.println(s
);
}
public String
replaceSpace(StringBuffer str
) {
return str
.toString().replaceAll(" ","%20");
}
public String
replaceSpaceByOne(StringBuffer str
) {
if(str
== null
|| str
.length()==0){
return null
;
}
String string
= str
.toString();
char[] oldChars
= string
.toCharArray();
int length
=oldChars
.length
;
int spaceNumber
=0;
for (int i
= 0; i
< oldChars
.length
; i
++) {
if(oldChars
[i
]==' '){
spaceNumber
++;
}
}
if(spaceNumber
== 0 ){
return string
;
}
int newLength
=length
+spaceNumber
*2;
char[] newChars
=new char[newLength
];
int newTime
=0;
for (int i
= 0; i
< oldChars
.length
; i
++) {
if(oldChars
[i
]==' '){
newChars
[newTime
++]='%';
newChars
[newTime
++]='2';
newChars
[newTime
++]='0';
}
else {
newChars
[newTime
++]=oldChars
[i
];
}
}
return String
.valueOf(newChars
);
}
}
暴力法
replaceSpace其实就是这个方法,贼简单将转成字符串,然后replace就可以完成了,哎有的时候还是挺感激java的方法的
一点点算法
这里使用了一点点的算法,首先呢我们先去判断空,做一个非空判断,其次呢我们先计算旧的字符换的长度,然后去计算旧的字符串的空格个数,然后用旧的字符串的长度,加上空格个数*2计算出新的字符串的长度,然后再去遍历旧的字符串,如果是出现空格则在空格的位置出现%20三个字符 这里就没有介绍时间复杂度和空间复杂度,实话实说这个的算法没有咋看出来可能是我太菜了吧。