剑指 Offer 05. 替换空格
问题:
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."
思路:
1. 方法(一):使用额外空间
代码:
class Solution {
public:
string replaceSpace(string s) {
string res="";
for(auto c:s)
{
if(c==' ')
{
// res.push_back('%');
// res.push_back('2');
// res.push_back('0');
res+="%20";
}
else
// res.push_back(c);
res+=c;
}
return res;
}
};
2. 在原空间上扩展,利用双指针。
代码:
class Solution {
public:
string replaceSpace(string s) {
int count=0;
int length=s.length(); //s的原长度
for(int i=0;i<length;i++)
{
if(s[i]==' ')
count++;
}
int new_length=length+count*2; //要输出的结果的s的长度
s.resize(new_length); //进行扩容 方式1
//方式2
// for(int i=0;i<count;i++)
// s+="00";
//两指针,从后到前开始换值。
//为什么是从后到前呢?因为这个是值往后面移,如果是从前往
//后,会出现原s被新s覆盖的情况,丢失原值。
for(int i=new_length-1, j=length-1;i>=0;i--,j--)
{
if(s[j]!=' ')
s[i]=s[j];
else {
s[i]='0';
s[i-1]='2';
s[i-2]='%';
i-=2;
}
}
return s;
}
};