剑指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;
    }
};

执行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值