【算法】【数组】替换空格

学而不思则罔,思而不学则殆

【算法】【数组】替换空格


题目

  • 题目:实现一个算法,把字符串中的每个空格替换成“%20”
  • 例如:We are happy.
  • 则输出:We%20are%20happy.

算法

思路:双指针,从后往前
一个空格符替换成成"%20",因此数组长度增减为空格符的个数*2

时间复杂度: O ( n ) O(n) O(n)

    //思路:双指针,从后往前
    static String replace(char[] chars) {
        if (chars == null) {
            return null;
        }

        //计算空格数量
        int nullCharNum = 0;
        for (char aChar : chars) {
            if (aChar == ' ') {
                nullCharNum++;
            }
        }

        //定义新的数组长度
        char[] newChar = new char[chars.length + nullCharNum * 2];
        int newCharIndex = newChar.length - 1;
        for (int oldCharIndex = chars.length - 1; oldCharIndex >= 0; oldCharIndex--) {
            char ch = chars[oldCharIndex];
            if (ch == ' ') {//填充“%20”
                newChar[newCharIndex--] = '0';
                newChar[newCharIndex--] = '2';
                newChar[newCharIndex--] = '%';
            } else {
                //填充字符
                newChar[newCharIndex--] = ch;
            }
        }
        
        return new String(newChar);
    }

测试

    public static void main(String[] args) {
        String test = "We are happy.";
        System.out.println(test);
        String replace = replace(test.toCharArray());
        System.out.println(replace);


        test = "String replace = replace(test.toCharArray());";
        System.out.println(test);
        replace = replace(test.toCharArray());
        System.out.println(replace);

        test = "String   replace";
        System.out.println(test);
        replace = replace(test.toCharArray());
        System.out.println(replace);


        test = "Stringreplace";
        System.out.println(test);
        replace = replace(test.toCharArray());
        System.out.println(replace);
    }

输出如下:

We are happy.
We%20are%20happy.
String replace = replace(test.toCharArray());
String%20replace%20=%20replace(test.toCharArray());
String   replace
String%20%20%20replace
Stringreplace
Stringreplace
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值