剑指 Offer 05.替换空格

双指针法


题目详情

请实现一个函数,把字符串 s 中的每个空格替换成"%20"


示例1:

输入:s = "We are happy."
输出:"We%20are%20happy."```

我的代码:

class Solution 
{
public:
    string replaceSpace(string s) 
    {
        int count=0,oldsize=s.size();
        for (int i = 0;i < oldsize;++i)     //遍历一次统计空格个数
        {
            if(s[i]==' ')
            {
                ++count;
            }
        }
        s.resize(oldsize + count * 2);      //利用resize函数扩充s
        int newsize = s.size();
        //双指针,i j一后一前从末尾开始向前移动
        for (int i = newsize - 1,j = oldsize - 1;j < i; --i, --j)
        {
            //遍历老s若不是空格,则用该字符填充末尾(给一会的'20%'腾出空间)
            if (s[j] != ' ')
            {
                s[i] = s[j];
            }
            else            //是空格就用'20%'填充末尾
            {
                s[i] = '0';
                s[i-1] = '2';
                s[i-2] = '%';
                i -= 2;     //i多减2别忘记
            }
        }
        return s;
    }
};

涉及知识点:

1.双指针算法

双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。也可以延伸到多个数组的多个指针。
若两个指针指向同一数组,遍历方向相同且不会相交,则也称为滑动窗口(两个指针包围的区域即为当前的窗口),经常用于区间搜索。
若两个指针指向同一数组,但是遍历方向相反,则可以用来进行搜索,待搜索的数组往往是排好序的。

思路:

首先扩充数组到每个空格替换成"%20"之后的大小。
然后从后向前替换空格,也就是双指针法

posted @ 2022-04-06 15:33  ggaoda  阅读(4)  评论(0编辑  收藏  举报  来源