剑指offer第二题

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

又是重名了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值