大家好呀,我是事事儿的蛋蛋。
今天来搞替换空格,没啥说的,直接冲。
剑指 Offer 05:替换空格
题意
把字符串 s 中的每个空格替换成 “%20”
示例
输入:s = “We are happy.”
输出:“We%20are%20happy.”
提示
- 0 <= length(s) <= 10000
题目解析
水题,难度简单。
字符串这边的题大多数都是可以用编程语言自带的库函数解决的,但是我们在 LeetCode 上刷题初期显然不能这样。
我们现在刷题的目的是为了更好的理解数据结构与算法,更好的理解一些封装起来的库函数是怎么实现的,而不是简简单单的为了刷题而刷题。
这道题的解法也不复杂,就是遍历整个字符串 s:
- 碰到非空格就继续走。
- 碰到空格就替换。
图解
以 s = “We are happy.” 为例。为了方便表示,我以下面的形式表示整个字符串。
在这维护一个结果列表 res,遍历字符串,刚开始碰到的是 “we”,直接加入 res。
if c != ' ':
res.append(c)
接下俩碰到空格,替换为 “%20”,加入列表。
if c == ' ':
res.append('%20')
接下来依次按照上面的情况进行,直至列表遍历完。
本题的解法从左到右遍历整个字符串,所以时间复杂度为 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“ 难一丢丢,难题还在后面,不要飘。
不过,可以给我多点点赞,让我飘起来呀。
哈哈哈,我是帅蛋,我们下次见。