1、replace函数
我们可以使用string内置的replace函数进行替换,函数具体格式如下:
string& replace (size_t pos, size_t len, const string& str);
其中, p o s pos pos指待替换位置的起始位置, l e n len len指待替换字符串的长度, s t r str str指替换的字符串。最终函数返回替换后的字符串的引用。
class Solution {
public:
string replaceSpace(string s) {
for (int i = 0; i < s.size(); ++i) {
if (s[i] == ' '){
s.replace(i, 1, "%20");
}
}
return s;
}
};
2、原地修改
我们可以遍历整个字符串,首先统计出现空格的次数,而后计算出替换字符串之后新字符串的长度。而后为了不改变字符串的顺序,我们从后向前逆序遍历:1、若不为空格则直接赋值;2、若为空格则对连续三位的字符串进行重新赋值。
class Solution {
public:
string replaceSpace(string s) {
int count = 0, len = s.size();
// 统计空格数量
for (char c : s) {
if (c == ' ') count++;
}
// 修改 s 长度
s.resize(len + 2 * count);
// 倒序遍历修改
for(int i = len - 1, j = s.size() - 1; 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;
}
};