剑指offer 05.替换空格

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

示例 1:

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

限制:

0 <= s 的长度 <= 10000

 

个人思路:刚开始就想直接使用String类自带的replaceALL()函数或者replace()可以直接完成,然后又回顾了一遍这两者的区别,replace()不能匹配正则表达式,repalceAll()可以匹配正则表达式。这样虽然可以解决这个题目,但是提交结果显示耗时和内存消耗过高。因此就不采用自带的方法。想到可以直接遍历这个字符串。然后自己将字符串通过split()划分成String类型的数组,再通过遍历数据,直接用String的+来连接两个字符串,但事实证明这样的效率也不是很高。最后查看题解,发现用的是StringBuffered,然后时间的快了很多,因为字符串的拼接之类的最好使用StringBuffered 。

 

方法一:遍历添加
在 Python 和 Java 等语言中,字符串都被设计成「不可变」的类型,即无法直接修改字符串的某一位字符,需要新建一个字符串实现。

算法流程:
初始化一个 list (Python) / StringBuilder (Java) ,记为 res ;
遍历列表 s 中的每个字符 c :
当 c 为空格时:向 res 后添加字符串 "%20" ;
当 c 不为空格时:向 res 后添加字符 c ;
将列表 res 转化为字符串并返回。
复杂度分析:
时间复杂度 O(N) : 遍历使用 O(N) ,每轮添加(修改)字符操作使用 O(1) ;
空间复杂度 O(N): Python 新建的 list 和 Java 新建的 StringBuilder 都使用了线性大小的额外空间。

class Solution {
    public String replaceSpace(String s) {
        StringBuilder res = new StringBuilder();
        for(Character c : s.toCharArray())
        {
            if(c == ' ') res.append("%20");
            else res.append(c);
        }
        return res.toString();
    }
}

 

posted @ 2021-10-29 21:14  夏天·烟火·我的尸体  阅读(39)  评论(0)    收藏  举报