剑指offer第二题

tech2022-08-09  139

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

最新回复(0)