zoukankan      html  css  js  c++  java
  • 剑指offer:替换空格

    题目描述:

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

    思路:

    一开始没理解,函数中给的参数length指的字符串长度,原来表示的是这个字符串的最大长度。参考了网上的题解,说明一下思路。

    最原始的想法自然就是从头遍历字符串,遇到空格,就将空格后的字符向后移动,再插入“%20”,但是这样的复杂度为O(n^2),考虑到其实每次替换的过程中后面的字符重复做后移操作。所以考虑从后往前遍历,记录出现的空格总数,再求新字符串的总长度。

    使用两个指针,做替换操作,第一个指针指向原始字符串的末尾,第二个指针指向新字符串末尾,从后往前遍历原始字符串,若当前字符为空格,则用第二个指针在新字符串中从后往前的插入“%20”,否则将第一个指针所指向的元素复制到第二个指针的位置。

    注意点:

    对字符串的处理都应该考虑最后的空字符’’。

    空指针判断nullptr。

    一般像这种需要向后扩充容量重新整理内存的,最好能够考虑到从尾部开始整理的方法。

    代码:

    class Solution {
    public:
        void replaceSpace(char *str,int length) {
            if(str==nullptr || length==0)
                return;
            int len_str=0;
            int blank=0;
            int i=0;
            while(str[i]!='')
            {
                len_str++;
                if(str[i]==' ')
                    blank++;
                i++;
            }
            int new_len = len_str + 2*blank;
            if(new_len>length)
                return;
            while(len_str>=0 && new_len>len_str)
            {
                if(str[len_str]==' ')
                {
                    str[new_len--] = '0';
                    str[new_len--] = '2';
                    str[new_len--] = '%';
                }
                else
                {
                    str[new_len--] = str[len_str];
                }
                len_str--;
            }
            return;
        }
    };
  • 相关阅读:
    解决html2canvas插件object-fit样式不生效问题
    七牛云视频获取视频封面和缩略图
    实现一个简单拖拽
    elementui遮罩层下方内容禁止滑动
    echars适配代码
    修改vue项目页面的title
    用div实现textarea
    判断手机端和pc端
    angular的跨域
    angular的文件上传
  • 原文地址:https://www.cnblogs.com/LJ-LJ/p/10581929.html
Copyright © 2011-2022 走看看