【实战】ACM 选手图解 LeetCode 替换空格

大家好呀,我是事事儿的蛋蛋。

今天来搞替换空格,没啥说的,直接冲。

d41bfbcd7dfd7ae6fe4553e01784dc3

剑指 Offer 05:替换空格

题意

把字符串 s 中的每个空格替换成 “%20”

示例

输入:s = “We are happy.”

输出:“We%20are%20happy.”

提示

  • 0 <= length(s) <= 10000

题目解析

水题,难度简单。

字符串这边的题大多数都是可以用编程语言自带的库函数解决的,但是我们在 LeetCode 上刷题初期显然不能这样。

我们现在刷题的目的是为了更好的理解数据结构与算法,更好的理解一些封装起来的库函数是怎么实现的,而不是简简单单的为了刷题而刷题。

这道题的解法也不复杂,就是遍历整个字符串 s:

  • 碰到非空格就继续走。
  • 碰到空格就替换。

图解

以 s = “We are happy.” 为例。为了方便表示,我以下面的形式表示整个字符串。

fcaad770a084d458b2207c0f451ef0e

在这维护一个结果列表 res,遍历字符串,刚开始碰到的是 “we”,直接加入 res。

f4b022a998f48c6ceb1bbc4cf0fb112

if c != ' ':
    res.append(c)

接下俩碰到空格,替换为 “%20”,加入列表。

1d6368f8d8068f4f3a0ca1e6446e220

if c == ' ':
    res.append('%20')

接下来依次按照上面的情况进行,直至列表遍历完。

f521cde5c5706550499d44581c1ddea

本题的解法从左到右遍历整个字符串,所以时间复杂度为 O(n)

时间复杂度还是按照你用的编程语言来算,如果字符串可修改的编程语言,比如 Python、Java,需要维护一个新的列表,这个的空间复杂度为 O(n),像可原地修改字符串的编程语言,比如 C++,这样的空间复杂度为 O(1)

代码实现

Python 代码实现

class Solution:
    def replaceSpace(self, s: str) -> str:
        # python 字符串不可修改,所以维护一个列表
        res = []

        for c in s:
            if c == ' ':
                res.append('%20')
            else:
                res.append(c)

        return ''.join(res)

Java 代码实现

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();
    }
}

图解替换空格到这就结束辣,是不是不用库函数也很简单?

醒醒,这才是道简单题,也就比 ”Hello World“ 难一丢丢,难题还在后面,不要飘。

不过,可以给我多点点赞,让我飘起来呀。

哈哈哈,我是帅蛋,我们下次见。


推荐阅读 👍:ACM 选手带你玩转时间复杂度和空间复杂度

推荐阅读 👍:ACM 选手带你玩转字符串

推荐阅读 👍:ACM 选手图解 LeetCode 反转字符串

推荐阅读 👍:ACM 选手图解 LeetCode 反转字符串Ⅱ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值