题目描述:
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/ti-huan-kong-ge-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
也是看了代码随想录以后才会做的。。
首先我们先将原来的字符串空间扩大,扩大到全部空格替换成%20以后的大小,%20相当于比空格多了两个字符
所以我们先将原字符串里面的空格个数count统计出来,那么替换成%20以后相当于在原来的大小基础上增加了2*count 的空间大小
扩大以后的字符串前面还都是原来的内容,后面是空的
我们就可以用双指针,一个left指向原来字符串的结尾,也就是left=Old_size()-1
right指向新字符串的结尾,也就是right=New_size()-1;
当left指向的是空格时,right 和right-1 以及right-2 对应的位置处的字符分别是0 2 %;
然后两个指针都左移
class Solution {
public:
string replaceSpace(string s) {
int count=0;
int Old_size=s.size();
int New_size;
for(int i=0;i<s.size();i++)
{
if(s[i]==' ')
{
count++;
}
}
New_size=Old_size+2*count;
s.resize(New_size);
for(int left=Old_size-1,right=New_size-1;left>=0;left--,right--)
{
if(s[left]==' ')
{
s[right]='0';
s[right-1]='2';
s[right-2]='%';
right=right-2; //注意将下标往前移动两个
}
else
{
s[right]=s[left];
}
}
return s;
}
};