[剑指OFFER] 替换空格

题目描述

请实现一个函数,将一个字符串中的空格替换成“%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标记从后往前把大的移动到后面。

原文地址:https://www.cnblogs.com/diegodu/p/4569826.html