题目描述

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

 

分析:

个人理解,应该是对空间复杂度有要求,如果没有要求,下面code就OK

class Solution {
    public:
        string replaceSpace(string str) {
            string rtn;
            for(int i = 0; i < str.size(); i++)
            {   
                if(str[i] == ' ')
                    rtn += "%20";
                else
                    rtn += str[i];
            }   
            return rtn;
        }   
};

进一步可以省些空间,参考 http://www.cnblogs.com/CnZyy/p/3304495.html

 

例如把we are happy这个字符串中所有空格替换成"%20",最直接的做法是从头开始扫苗,遇到空格就替换,并且把空格后面的字符都顺序后移。复杂度O(n^2)。

重要思想(这个从后往前的思想特别重要,举一反三的例子也是):先扫描一遍字符串统计出空格数量blanknum,由于每个空格被替换成3个字符"%20",即每替换一个空格总长度增加2,因此最后总的长度应该是原长+blanknum*2。然后对字符串从后往前扫描,不是空格的直接移动到新位置,如果是空格替换成%20。

举一反三:

有两个已排序数组A,B,A的末尾有足够的空间放A和B。现要求将B所有元素插入A中并仍是有序的,要求O(n)。

类似的:用两个index标记从后往前把大的移动到后面。

相关文章:

  • 2022-01-12
  • 2021-10-13
  • 2021-12-29
  • 2021-07-28
  • 2022-12-23
猜你喜欢
  • 2019-08-25
  • 2019-09-14
  • 2021-06-22
  • 2021-07-23
  • 2021-08-02
相关资源
相似解决方案