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];
                }
            }
    	}
    };
    
  • 相关阅读:
    Vue--vue-Router
    Vue--vue中的组件、组件绑定事件和数据、私有组件、子组件,父子组件参数互传
    CF 631C report
    生日Party 玄学多维DP
    HDU-6376 度度熊剪纸条
    CF 1012C Dp
    CF 997A
    HDU-1051 一个DP问题
    偶尔间看到,来开心一下
    合并石子
  • 原文地址:https://www.cnblogs.com/Bylight/p/10440871.html
Copyright © 2011-2022 走看看