• [剑指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标记从后往前把大的移动到后面。

  • 相关阅读:
    学习进度10
    阅读笔记07
    构建之法阅读笔记06
    学习进度09
    构建之法阅读笔记05
    团队项目个人每日总结(4.27)
    学习进度08
    构建之法阅读笔记04
    写好一份技术简历很重要
    技术人员的发展之路
  • 原文地址:https://www.cnblogs.com/diegodu/p/4569826.html
Copyright © 2020-2023  润新知