概述
分析
-
这题,如果不限制空间复杂度,其实很简单,直接开一个新的
string
就可以实现了 -
但是,如果要求只能原理处理呢?这里有一个问题需要解决:
-
s --> %20
,增加了字符,需要增加striing的容量因为
push_back
之能最末尾操作
-
思路
增加容量
- 可以先遍历一遍string,统计空格的个数,就可以知道最终需要扩充的大小了
- 然后利用
resize()
来扩充大小
代码
class Solution {
public:
string replaceSpace(string s) {
int count = 0; // 统计空格的个数
int sOldSize = s.size();
for (int i = 0; i < s.size(); i++) {
if (s[i] == ' ') {
count++;
}
}
// 扩充字符串s的大小,也就是每个空格替换成"%20"之后的大小
s.resize(s.size() + count * 2);
// 为了原地操作,所以使用双指针法
int ptr = s.size() - 1, wokr_ptr = sOldSize - 1;
// 这里要从后往前,因为如果添加新元素从前往后,会覆盖掉原始的元素(
for(; wokr_ptr >= 0; --wokr_ptr) {
if (s[wokr_ptr] != ' ') s[ptr--] = s[wokr_ptr];
else {
s[ptr] = '0';
s[ptr - 1] = '2';
s[ptr - 2] = '%';
ptr -= 3;
}
}
return s;
}
};