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

    题目

    题目链接
    剑指offer:替换空格
    题目描述
    请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

    解题思路

    这题是很简单的字符串替换问题,最容易想到的就是从前往后依次替换,比较让人困惑的是所给函数形参中length的作用。
    在查看题目的讨论区时,发现从后往前替换会明显优于从前往后的替换,因为在前者的替换过程中,不需要进行字符的移动,能够大幅度提升效率。在下文中给出的是更优的从后往前替换的代码。同时,讨论区中,大家认为题中的length指的是需返回字符串的最大长度,这一要求也在代码中有体现。

    具体代码

    1.从后往前替换字符串

    class Solution {
    public:
    	void replaceSpace(char *str,int length) {
            // 排除非法字符串的可能
            if (str == NULL || length < 0) {
                return;
            }
            
            // 初始化字符串原始长度、字符串目标长度、字符串中空格数
            int oldLength = 0;
            int newLength = 0;
            int spaceNumber = 0;
            
            // 遍历字符串求出上述参数
            for (int i = 0; str[i] != ''; i++) {
                oldLength++;
                if (str[i] == ' ') {
                    spaceNumber++;
                }
            }
            newLength = oldLength + spaceNumber * 2;
            
            // 如果目标长度大于给出长度要求则结束函数
            if (newLength > length) {
                return;
            }
            
            // 从后往前处理字符串
            for (int i = oldLength; i >= 0; i--) {
                if (str[i] == ' ') {
                    str[newLength--] = '0';
                    str[newLength--] = '2';
                    str[newLength--] = '%';
                } else {
                    str[newLength--] = str[i];
                }
            }
    	}
    };
    
  • 相关阅读:
    js加法计算器
    js基础语句
    箭头点击左右滚动-18
    返回头部,滚动显示-17
    图片定位一个地方
    最值一看专题图片轮播图-16
    右侧常用浮动导航,返回顶部-15
    产业带多种轮播效果,头部效果-14
    分辨率判断-13
    图片自动滚动,鼠标滑过悬停-12
  • 原文地址:https://www.cnblogs.com/Bylight/p/10440871.html
Copyright © 2011-2022 走看看