剑指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三个字符
这里就没有介绍时间复杂度和空间复杂度,实话实说这个的算法没有咋看出来可能是我太菜了吧。