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];
                }
            }
    	}
    };
    
  • 相关阅读:
    CTreeCtrl::HitTest
    GetLastError()函数返回值及含义
    最大轮廓和投影 转
    一些Python黑客脚本
    win10系统架构调用
    rootkit基础
    面向对象编程
    机器学习概述
    XXE攻击
    浏览器安全
  • 原文地址:https://www.cnblogs.com/Bylight/p/10440871.html
Copyright © 2011-2022 走看看