问题:读题又不仔细。。。。以为直接用 ' % ‘ 替代空格。。。。。
完全未设想的思路:
双指针!天哪,,,双指针真的好灵活。。
双指针还是得搞清楚两个指针究竟干嘛的
i 指向的是原数组的下标
j 指向的是新数组的下标
步骤:
学到的:
1.扩容方法:resize 函数,意识是需要将数组的大小变为多大 s.resize()
2. 数组填充类问题:数组进行扩容修改的时候,先扩容,然后从后向前遍历
好处:
1.不用移动数组
2.不用申请新的数组
注意点:
1. 注意扩容的大小,增加的是两倍的空格数量 2 * count
2.在 后面双指针移动的时候,如果 i 遇到了空格,j额外填充两个格子,所以在填充完需要 j-=2
注意填充的时候是逆序填充的哈
二刷:
1. 注意终止条件
2.扩容的个数
3. 双指针是根据扩容前和扩容后来指的
class Solution {
public:
string replaceSpace(string s) {
int count = 0;
int oldSize = s.size(); // i 起始位置
for(int i = 0; i < s.size(); i++)
{
if(s[i] == ' ')
count++;
}
// 扩容
s.resize(s.size() + 2 * count);
int newSize = s.size(); // j 起始位置
int i = oldSize - 1, j = newSize - 1;
for(; i < j; j--,i--)
{
if(s[i] != ' ')
s[j] = s[i];
else
{
s[j] = '0';
s[j - 1] = '2';
s[ j - 2] = '%';
j -= 2;
}
}
return s;
}
};