剑指offer.05.替换空格

前言

算法打卡,替换空格,第一印象可以使用s.replaceAll(" ","%20"),可以向面试官展示你熟练的API操作,但是这样做对你的印象会打打折扣。

一、StringBuilder

1、想法

通过循环遍历的方式,取所有的字符来和空格字符比较,如该位置的字符为空格,则添加“%20”进入stringbuilder,反之,把原来的字符append到stringbuilder。
1)StringBuilder
StringBuffer为了保证线程安全,在StringBuilder的基础上使用了Synchronized锁,而这里的单线程不需要考虑线程安全,这样就加快了处理速度。
2)三目运算符
CPU执行指令存在高速缓存中,有一个指令队列,当使用if…else代码时,先把if中的指令加入队列,而当if不成立时,队列清空,加入else的代码(指令)。但对于三目运算符,则使用把两种可能都加入队列的机制,CPU会执行全部指令,然后根据最后运算出的条件来选择需要的结果。这看起来虽然CPU运算的指令变多,但是减少了等待时间,CPU最擅长的就是计算。

2、源码

public String replaceSpace(String s) {
        //单线程,不用stringbuffer来同步
        StringBuilder result = new StringBuilder();
        for(int i = 0;i < s.length();i++)
            result.append(" ".equals(s.substring(i,i+1))?"%20":s.substring(i,i+1));
        return result.toString();
    }

二、采用数组

用字符数组存作为cache,根据条件缓存该存的字符。最后生成string。

1、源码

public String replaceSpace(String s) {
        int len = s.length();
        char[] cache = new char[len * 3];
        int size = 0;
        for(int i = 0;i < len;i++){
            if(s.charAt(i) == ' '){
                cache[size++] = '%';
                cache[size++] = '2';
                cache[size++] = '0';
            }else{
                cache[size++] = s.charAt(i);
            }
        }
        String result = new String(cache,0,size);
        return result;
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值