在这道题中,循环条件如果是i<=j,那么会当i==j==0时,j--造成溢出的错误。
思路
如果想把这道题目做到极致,就不要只用额外的辅助空间了!
首先扩充数组到每个空格替换成"%20"之后的大小。
然后从后向前替换空格,也就是双指针法,过程如下:
i指向新长度的末尾,j指向旧长度的末尾。
class Solution {
public:
string replaceSpace(string s) {
size_t spaces = 0;
//统计空格的数量
for(char c:s){
if(c == ' '){
spaces++;
}
}
//扩充字符串长度
auto oldStringLength = s.size();
auto newStringLength = oldStringLength + 2*spaces;
s.resize(newStringLength);
//双指针法,i指向旧字符串末尾,j指向新字符串末尾
//如果i=j
for(auto i = oldStringLength - 1,j = newStringLength - 1;
i <= j;){
if(s[i]==' '){
s[j--] = '0';
s[j--] = '2';
s[j--] = '%';
i--;
}else{
s[j--] = s[i];
i--;
}
}
return s;
}
};