剑指 Offer 05. java解替换空格( 没有StringBuffer、StringBuilder、双指针也beat100%)

48 篇文章 0 订阅

一、问题描述:

剑指 Offer 05. 替换空格

难度简单252

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

示例 1:

输入:s = "We are happy."
输出:"We%20are%20happy."

限制:

0 <= s 的长度 <= 10000

通过次数411,677

提交次数542,027

二、思路:

​ 这道题首先xin麒是想到先使用一个ArrayList<Character>类型的arraychar变量来逐个添加s的字符数组里面的每一个元素,如果是空格的则替换为添加%20的每一个字符。最后再通过一次遍历将arraychar的元素举逐个添加到字符数组里面,最后返回该字符数组的对应的字符串。

三、题解:

题解1:

class Solution {
    public String replaceSpace(String s) {
        ArrayList<Character> arraychar = new ArrayList<>();
        for (char c :s.toCharArray()) {
            if (c == ' '){
                arraychar.add('%');
                arraychar.add('2');
                arraychar.add('0');
            }else {
                arraychar.add(c);
            }
        }
        char[] chars = new char[arraychar.size()];

        for (int i = 0; i < arraychar.size(); i++) {
            chars[i] = arraychar.get(i);
        }
        return String.valueOf(chars);
    }
}
运行:

在这里插入图片描述

同样,如果xin麒是将通过调用函数,那么效率也是没有降低:

在这里插入图片描述

而对于内存的消耗就稍微优化了些。

旧知识巩固与深入(有待探究):

​ xin麒一开始并不是这样子做的;题解1的思路是一开始想到的,但是怕效率低下,于是想到了题解2的思路。题解2的思路是构造一个空字符串t;遍历s的每一个字符时,判断一下是否为空格,如果是,则t += "%20";反之,直接添加遍历到的元素。

但是xin麒在实现2的同时,感觉题解2的思路不一定是最优的,因为之前学字符串的添加时xin麒知道字符串的添加可能会更加费时。后面果然是费时了。xin麒在对于字符串的+=操作是看过源码的,不过忘记细节了,得后面找个时间钻一下源码再完善一下。

题解2(xin 麒的题解1可以beat 100%,但是题解2无法beat 100%)

class Solution {
    public String replaceSpace(String s) {
        String t = "";
        for (char c :s.toCharArray()) {
            if (c == ' '){
                t += "%20";
            }else {
                t += c;
            }
        }

        return t;
    }
}

运行6 ms,才beat 5%左右。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值