方法一:
初始化:空格数量 count ,字符串 s 的长度 len ;
统计空格数量:遍历 s ,遇空格则 count++ ;
修改 s 长度:添加完 "%20" 后的字符串长度应为 len + 2 * count ;
倒序遍历修改:i 指向原字符串尾部元素, j 指向新字符串尾部元素;当 i = j 时跳出(代表左方已没有空格,无需继续遍历);
当 s[i] 不为空格时:执行 s[j] = s[i] ;
当 s[i] 为空格时:将字符串闭区间 [j-2, j] 的元素修改为 "%20" ;由于修改了 3 个元素, 因此需要 j -= 2 ;
返回值:已修改的字符串 s ;
class Solution {
public:
string replaceSpace(string s) {
int len = s.size();
int count = 0;
for(auto i:s){
if(i==' ')
count++;
}
//扩展字符串的大小
s.resize(len + 2*count);
int n_len = s.size();
for(int i =len,j =n_len;i<j;--i,--j){
if(s[i]!=' '){
s[j] = s[i];
}
else{
s[j-2] = '%';
s[j-1] = '2';
s[j] = '0';
j-=2;
}
}
return s;
}
};
方法二
class Solution {
public:
string replaceSpace(string s) {
int len = s.size();
string res;
for(int i =0;i<len;++i){
if(s[i]==' '){
//push_back
res.append("%20");
}
else{
res.push_back(s[i]);
}
}
return res;
}
};
方法三
class Solution {
public:
string replaceSpace(string s) {
int n = s.size();
for(int i = n - 1; i <= 0; i--)
if(s[i] == ' ')
s.replace(i,1,"%20");
return s;
}
};