剑指offer java no.05

本文介绍了一个简单的字符串处理算法,该算法能将输入字符串中的所有空格替换成%20。通过从后向前遍历并复制字符的方式,有效地减少了字符移动次数,实现了O(n)的时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

no.05: 请实现一个函数,把字符串中的每个空格替换成"%20"
例如输入"We are happy",则输出"We%20are%20happy"

public class NO05 {
    public static void main(String[] args) {
        String string = new String("We are happy");
        char[] charArray = string.toCharArray();
        int length = charArray.length;
        NO05A no05A = new NO05A();
        System.out.println(no05A.change(charArray, length));
    }
}

class NO05A{
    char[] change(char[] chars, int length){
        int count = 0;
        for (int i = 0; i < length; i++){
           if (chars[i] == ' '){
               count++;
           }
        }
        if (count == 0){
            return chars;
        }
        int i = length - 1;
        int j = (length + count * 2) - 1;
        char[] newchars = new char[length + count * 2];
        for (; i >= 0 && j >= 0; i--){
            if (chars[i] != ' '){
                newchars[j] = chars[i];
                j--;
            }else{
                newchars[j] = '0';
                newchars[j - 1] = '2';
                newchars[j - 2] = '%';
                j -= 3;
            }
        }

        return newchars;
    }
}

思路:空格‘ ’替换成%20 ,一个字符变成了三个,所以要进行字符集长度的扩展。
如果从前往后复制每个数字,则需要重复移动数字多次,时间复杂度为O(n^2)
所以可以考虑从后往前复制,可以减少移动的次数,时间复杂度为O(n),大大提高了效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值