剑指 Offer 05. 替换空格
难度:简单 牛客地址 LeetCode地址
题目描述
请实现一个函数,把字符串 s
中的每个 空格
替换成 %20
。
样例
输入:s = “We are happy.”
输出:“We%20are%20happy.”
限制
- 0 < = s 的 长 度 < = 10000 0 <= s 的长度 <= 10000 0<=s的长度<=10000
- 注意输出字符串的长度可能大于 10000 10000 10000。
算法
法1)字符串处理
-
开一个字符串存储答案
-
遍历输入的字符串,当遍历到的字符为
空格
时,答案字符串加上%20
,否则,答案字符串加上当前遍历的字符。
时间复杂度
- 需要遍历整个字符串,故时间复杂度为 O ( n ) O(n) O(n) 。
空间复杂度
- 需要额外开一个字符串存储答案,故额外空间复杂度为 O ( n ) O(n) O(n) 。
C++代码
class Solution {
public:
string replaceSpace(string s) {
string ans;
for (auto &x : s)
if (x == ' ') ans += "%20";
else ans += x;
return ans;
}
};
法2)双指针
- 一个指针指向当前遍历到的输入字符串中的元素。
- 一个指针指向当前答案添加元素的位置。
时间复杂度
- 需要遍历输入的字符串,时间复杂度为 O ( n ) O(n) O(n) 。
- 需要遍历答案,时间复杂度为 O ( n ) O(n) O(n) 。
- 故时间复杂度为 O ( n ) O(n) O(n) 。
空间复杂度
- 需要额外开一个字符串存储答案,故额外空间复杂度为 O ( n ) O(n) O(n) 。
C++代码
class Solution {
public:
string replaceSpace(string s) {
char ans[s.size() * 3 + 5];
int id = 0;
for (auto &x : s) {
if (x == ' ') ans[id++] = '%', ans[id++] = '2', ans[id++] = '0';
else ans[id++] = x;
}
ans[id] = 0;
return ans;
}
};
混一天和努力一天,一天看不出任何差别,三天看不到任何变化,七天也看不到任何距离……但是一个月后会看到话题不同,三个月后会看到气场不同,半年后会看到距离不同,一年后会看到人生道路截然不同。
————送给每个仍在为梦想努力奋斗的你