题目描述:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."
1、首先扩充数组到每个空格替换成"%20"之后的大小。然后从后向前替换空格,也就是双指针法,过程如下:i指向新长度的末尾,j指向旧长度的末尾。
- 时间复杂度:O(n) 空间复杂度:O(1)
class Solution {
public:
string replaceSpace(string s) {
int count=0; // 统计空格的个数
int OldSize=s.size();
for(int i=0;i<s.length();i++)
{
if(s[i]==' ') count++;
}
// 扩充字符串s的大小,也就是每个空格替换成"%20"之后的大小
s.resize(s.size()+2*count);
int NewSize=s.size();
// 从后先前将空格替换为"%20"
for(int i=NewSize-1,j=OldSize-1;i>=0,j>=0;j--,i--)
{
if(s[j] != ' ')
{
s[i]=s[j];
}
else
{
s[i]='0';
s[i-1]='2';
s[i-2]='%';
i -=2;
}
}
return s;
}
};
2、用c++自带的插入删除函数
class Solution {
public:
string replaceSpace(string s) {
for(int i=0;i<s.size();i++)
if(s[i]==' ')
{
s.erase(s.begin()+i);
s.insert(i,"%20");
}
return s;
}
};