剑指offer05-替换空格

Posted yumoz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer05-替换空格相关的知识,希望对你有一定的参考价值。

题目描述

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。(点此处,直接跳转至LeetCode原题出处)

示例 1:

输入:s = “We are happy.”
输出:“We%20are%20happy.”

解析

解法一:

使用范围for,定义,ret为一个定义的字符串ch为从参数传来的字符串中取得的字符。判断字符是否为空格,若不为空格,只需要执行“ret += ch”,若为空格只需要执行“ret +=“%20” ”;最后返回ret的值即可。

class Solution {
public:
    string replaceSpace(string s) {
        string ret;
        for(auto ch:s)
        {
            if(ch != ' ')
            {
                ret += ch;
            }
            else
            {
                ret += "%20";
            }
        }
        return ret;
    }
};

执行结果:

解法二:

考虑到上述解法的效率问题,由于每次“+=”都会增容,会有消耗,这里改进了一点,可以提前开好空间。

class Solution {
public:
    string replaceSpace(string s) {
        
        size_t spaceNum = 0; //统计空格
        for(auto ch : s)
        {
            if(ch == ' ')
            ++spaceNum;
        }

        //直接计算增容,避免+=每次都增容,增容对内存的消耗,提前开空间
        string ret;
        ret.reserve(s.size() + spaceNum*2);//提前开空间
        for(auto ch : s)
        {
            if(ch != ' ')
            {
                ret += ch;
            }
            else
            {
                ret += "%20";
            }
        }
        return ret;
    }
};

执行结果:

以上是关于剑指offer05-替换空格的主要内容,如果未能解决你的问题,请参考以下文章

剑指OFFER----面试题05.替换空格

LeetCode(剑指 Offer)- 05. 替换空格

Leetcode剑指 Offer 05. 替换空格

剑指 Offer 05. 替换空格

剑指 Offer 05. 替换空格

剑指 Offer(第 2 版)刷题 | 05. 替换空格