替换空格(java)

题目:请实现一个函数,把字符串中的个空格替为"%20".例如输入"we are happy",则输出"we%20are%20happy"

------------------------------------------------

思路:

逆序替换,降低时间复杂度

---------------------------------

基本方案:

  • String一旦初始化,无法改变。
  • 使用StringBuffer,是因为牛客网的模板。
  • 实际使用中,单线程建议是用StringBuilder,因其无锁,效率高。
  • 多线程中,使用StringBuffer。
  • 两者的内置函数是相同的
一般方案代码:
public static String replaceSpace(StringBuffer str){
        
        int length = str.length();
        int spacenum = 0;
        
        //统计空格字符个数
        for(int i=0;i<length;i++){
            if(str.charAt(i) == ' ')
                spacenum++;
        }
        
        int lengthNew = length + spacenum*2;
        str.setLength(lengthNew);
        int index = length-1;
        int indexNew = lengthNew-1;

        for(;index>=0;index--){
            
            if(str.charAt(index) == ' '){
                str.setCharAt(indexNew--, '0');
                str.setCharAt(indexNew--, '2');
                str.setCharAt(indexNew--, '%');
            }
            else{
                str.setCharAt(indexNew--, str.charAt(index));
            }
        }
        return str.toString();
    }
而我在判断条件 index>=0上加以改进,由于考虑到像本题的测试案例,在we之后一个空格之前的char不需要移动,因此倘若判断条件为大于等于0时,则会
浪费时间,因此我们把判断条件改为index<indexNew;这样在判断循环到e的时候就会停止,测试案例的第一个空格离开头越远,这个小改进的优越性越明显;
并且我对空格在开头的" we are happy"进行测试,结果为%20we%20are%20happy,正确。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值