题目描述

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。To do it!
示例输入: s = “We are happy.”
输出:“We%20are%20happy.”
限制:0 <= s 的长度 <= 10000


题解

遍历添加

1
2
3
4
5
6
7
8
9
10
11
class Solution {
public:
string replaceSpace(string s) {
string res = "";
for (char c : s) {
if (c == ' ') res.append("%20"); // res += "%20";
else res.push_back(c); // res += c;
}
return res;
}
};

时间复杂度:O(n)空间复杂度:O(n)

原地扩容修改

在 C++ 中,string 被设计成可变的类型,可以在不新建字符串的情况下实现原地修改。由于需要将一个字符的 空格 替换为三个字符的 “%20”,新字符串的长度 = 原字符串长度 + 2 * 空格的个数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 不新建字符串,原地修改
class Solution {
public:
string replaceSpace(string s) {
int spaceCount = 0; // 统计空格数
for (char c : s) if (c == ' ') ++spaceCount;
int len = s.size();
s.resize(len + spaceCount * 2); // 给字符串扩容
int i = len - 1, j = s.size() - 1; // 0 <= i <= j
while (i < j) { // i 指向原字符串末尾,j 指向扩容字符串末尾
if (s[i] == ' ') {
s[j--] = '0'; s[j--] = '2'; s[j--] = '%';
} else {
s[j--] = s[i];
}
--i;
}
return s;
}
};

时间复杂度:O(n)空间复杂度:O(1)