该题的难点是在替换的时候%20,符号加上数字并不能有效的直接替换,因此选择填充法。
这道题主要利用的是填充法,因为要在原来字符串的基础上插入空格,因此要设定一个新的字符串,在创建新的字符串的时候需要先求出原来字符串的长度,分别将字母和应该插入的符号和数字添加进字符串中。
需要定义两个指针,一个指针指向原来的字符串,一个指针指向现在创建的新的字符串,需要从后往前遍历。
class Solution {
public:
string replaceSpace(string s) {
// 计算空格的数量
int count = 0;
for(int i = 0;i < s.size();i++)
{
if(s[i] == ' ')
{
count ++;
}
}
// 原数组的长度
int beforeLen = s.size();
// 现在数组的长度
s.resize(beforeLen + count * 2);
int newLen = s.size();
// 双指针法 替换字符 从后往前判断
for(int i = beforeLen - 1, j = newLen - 1; i < j;i--,j--)
{
// 利用了一个填充字符的防范
// 如果不是空格 则填充到新的字符串中
if(s[i] != ' ')
{
s[j] = s[i];
}else{
s[j] = '0';
s[j-1] = '2';
s[j-2] = '%';
j = j - 2;
}
}
return s;
}
};