题目描述:请实现一个函数,把字符串中的每个空格替换成"%20"。
例如:输入:s = “We are happy.”,输出:“We%20are%20happy.”
LeetCode链接
题目分析:
- 若从前向后拷贝,空格只有1个字符,'20%'是三个字符,会覆盖后面的内容,因此需要从后向前拷贝
- 我们可以定义两个指针,拷贝完后指针向前移动,遇到空格则替换为’20%’
- 直到拷贝到字符串开头或者两个指针相遇才算替换完了所有的空格
- 因此循环退出的控制条件为:原字符串指针下标>=0并且新字符串指针下标>原字符串指针下标,两者任一条件不成立时则字符串空格替换完毕
题目代码:
class Solution {
public:
string replaceSpace(string s) {
//若s大小为0,则直接返回
if(s.length()==0) return s;
//计算s长度和空格个数
int len=s.size()-1;
int space=0;
for(auto c:s)
{
if(c==' ') ++space;
}
//计算新字符串长度
int newlen=len+space*2;
//若新长度和原长度相同,则说明原字符串中没有空格,直接返回
if(newlen==len) return s;
//给新字符串扩容并初始化为空格
s+=string(space*2,' ');
//将s和%20拷贝到新字符串中
while(len>=0 && newlen>len)
{
if(s[len]==' ')
{
s[newlen--]='0';
s[newlen--]='2';
s[newlen--]='%';
}
else
{
s[newlen--]=s[len];
}
--len;
}
return s;
}
};