题目描述
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = “We are happy.”
输出:“We%20are%20happy.”
限制:
0 <= s 的长度 <= 10000
分析
题目要求把空格替换成“%20”,如果s的长度为n,那么输出字符串的长度为n + 2 * m ,m为空格的个数
- 首先统计空格的个数,记为m
- 改变s的长度为n + 2 * m
- 使用两个指针p1,p2,分别指向原始字符串的尾部,和现在字符串的尾部
- 判断p1指向的值是不是为空格,如果不是:把p1的值赋给p2所指向的值,然后两个指针同时向前移动一位;如果是空格p1向前移动一位,p2向前移动三位,并且同时将这三位赋值为%20
- 当p1或p2小于0时,转换完毕
代码
class Solution {
public:
string replaceSpace(string s) {
if (s.empty()) return s;
int cnt = 0, n = s.size();
for (auto i : s) {
if (i == ' ') cnt++;
}
int m = n + 2 * cnt;
s.resize(m);
int p1 = n - 1, p2 = m - 1;
while (p1 >= 0 && p2 >= 0) {
if (s[p1] != ' ') s[p2--] = s[p1--];
else {
s[p2--] = '0';
s[p2--] = '2';
s[p2--] = '%';
p1--;
}
}
return s;
}
};