剑指offer系列(3)——替换空格

题目:请实现一个函数,把字符串的每个空格替换成“%20”。例如输如:“We Are Happy”,则输出“We20%Are20%Happy”。

第一种方法是一种时间复杂度为O(n^2)的方法,即每碰到一个空格就替换,这种想法的缺点很明显,每次移动都需要移动后面所有的字符,为了减少字符的移动次数,我们可以从后往前替换空格。

第二种方法是一种时间复杂度为O(n)的方法,即用两边遍历,第一遍遍历整个字符数组,找出所有的空格数。直接申请一个正好大小的数组,再用一遍循环替换空格。因为所有的字符只需要移动一次,因此时间效率为O(n)。
代码实现如下:

public class ReplaceBlank {
/*
 * 替换空格 
 * 输入 We Are Happy
 * 输出 We20%Are20% Happy
 * 
 */
    public static void main(String[] args) {
        System.out.println(replaceBlank("We Are Happy"));
    }

    public static String replaceBlank(String aim){
        if (aim == null) {
            throw new RuntimeException("字符串为空");

        }
        if (!aim.contains(" ")) {
            return aim;
        }
        char[] aimTmp = aim.toCharArray();
        int num = 0;                        //空格数量
        for (int i = 0; i < aimTmp.length; i++) {
            if (aimTmp[i] == ' ') {
                num++;
            }

        }

        char[] result = new char[aimTmp.length + num * 2];      //创建新数组
        int k = 0;                                              //用k来做新数组的循环变量
        for (int j = 0; j < aimTmp.length; j++) {
            if (aimTmp[j] == ' ') {
                result[k] = '%';
                result[k+1] = '2';
                result[k+2] = '0';
                k += 3;
            }else{
                result[k] = aimTmp[j];
                k++;
            }
        }
        return Arrays.toString(result);

    }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值