请实现一个函数,把字符串 s
中的每个空格替换成"%20"。
解析:首先,求出有多少个空格,然后扩充数组到每个空格替换成"%20"之后的大小。然后从后向前替换空格,也就是双指针法。i指向新长度的末尾,j指向旧长度的末尾。
这么做有两个好处:
1.不用申请新数组。
2.从后向前填充元素,避免了从前先后填充元素要来的 每次添加元素都要将添加元素之后的所有元素向后移动。
具体代码如下:
class Solution {
public:
string replaceSpace(string s) {
int count = 0;//算空格
int oldsize =s.size();
for(int i=0 ;i<s.size();i++)
{
if(s[i] ==' ')
{
count++;//有空格就+1
}
}
s.resize(s.size() + count*2);//扩展源字符串
int newsize = s.size();
for(int i = newsize-1,j = oldsize - 1 ;j < i; i--,j--)
{
if(s[j] != ' ')
{
s[i] =s[j];
}
else
{
s[i] = '0';//插入
s[i-1] = '2';//插入
s[i-2] = '%';//插入
i -= 2;//向前移2个单位
}
}
return s;
}
};