题目描述
请实现一个函数,把字符串 s
中的每个空格替换成"%20"。
示例 1:
输入:s = "We are happy." 输出:"We%20are%20happy."
题解
本题如果想降低空间复杂度从(2n+2k)至(n+2k),需要倒着复制字符串,先统计空格,然后用resize为新的大小申请额外内存,之后双指针,一个指向新的最后,一个指向旧的最后倒着复制,遇到空格接下来三个分别是'0' 、'2' 、'%‘。
class Solution {
public:
string replaceSpace(string s) {
int count=0;
int size=s.size();
for(int i=0;i<size;i++)
{
if(s[i]==' ')
count++;
}
s.resize(size+count*2);
int newsize=s.size();
for(int i=size-1,j=newsize-1;i>=0,j>=0;i--,j--)
{
if(s[i]!=' ')
s[j]=s[i];
else
{
s[j]='0';
s[j-1]='2';
s[j-2]='%';
j-=2;//多出两格要左移,否则不同步
}
}
return s;
}
};