题目描述
分析
题目实现比较容易,就是把空格替换成三个字符而已,但是难点在于怎么降低复杂度
寻常做法是两个for循环或者一个for一个while嵌套进行遍历(我试过超时了)
因为要找空格和插入两个步骤,那么可以采用双指针一边找一边移动进行插入,从后面插(这样复杂度是N)
代码实现
class Solution {
public:
string replaceSpace(string s) {
int count = 0;
// 记录之前的字符串大小
for(int i = 0; i<s.size(); i++)
{
if(s[i] == ' ')
{
count++;
}
}
int left = s.size() - 1;
// 先扩容 之前就是一倍了所以加上两倍即可
s.resize(s.size() + 2*count);
int right = s.size() - 1;
// 边找边移动 写在一起
for(int j = left, i = right; j<i; j--,i--)
{
if(s[j] != ' ')
{
s[i] = s[j];
}else
{
s[i]= '0';
s[i-1] = '2';
s[i-2] = '%';
i -=2;
}
}
return s;
}
};