day8-剑指Offer 05.替换空格

剑指Offer 05.替换空格

力扣题目链接(opens new window)

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

示例 1: 输入:s = “We are happy.”
输出:“We%20are%20happy.”

思路

这道题寻常做法极其简单,一般人不用30s就可以搞定,但是这样一来空间复杂度却不能O(1),如果要做到极致还得是双指针

有以下几点需要注意:

  • 为了做到原地操作,必须提前对数组进行扩充,扩充的数量看空格的数量,稍微计算可知扩充数量=空格数*2
  • 为了做到O(n)过,必须从后往前遍历,而如果从前往后则是O(n^2)

代码如下:

class Solution {
public:
    string replaceSpace(string s) {
       int count=0;
       for(char c:s)
       {
           if(c==' ')count++;
       } //事先统计空格数量
       int oldSize = s.size();
       s.resize(oldSize + count*2);
        int newSize = s.size();
       int i,j;
        for(i=oldSize-1,j=newSize-1;i<j;i--,j--)
        {
            if(s[i] != ' ')s[j] = s[i];
            else{
                s[j] = '0';
                s[j-1] = '2';
                s[j-2] = '%';
                j-=2;
            }
        }
        return s;
    }
};

你可能感兴趣的:(算法,算法)