剑指 Offer 05. 替换空格

剑指 Offer 05. 替换空格

难度:简单    牛客地址    LeetCode地址

题目描述

请实现一个函数,把字符串 s 中的每个 空格 替换成 %20

样例

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

限制

  • 0 < = s 的 长 度 < = 10000 0 <= s 的长度 <= 10000 0<=s<=10000
  • 注意输出字符串的长度可能大于 10000 10000 10000

算法

法1)字符串处理
  • 开一个字符串存储答案

  • 遍历输入的字符串,当遍历到的字符为 空格 时,答案字符串加上 %20,否则,答案字符串加上当前遍历的字符。

时间复杂度
  • 需要遍历整个字符串,故时间复杂度为 O ( n ) O(n) O(n)
空间复杂度
  • 需要额外开一个字符串存储答案,故额外空间复杂度为 O ( n ) O(n) O(n)
C++代码
class Solution {
public:
    string replaceSpace(string s) {
        string ans;
        for (auto &x : s)
            if (x == ' ') ans += "%20";
            else ans += x;
        return ans;
    }
};
法2)双指针
  • 一个指针指向当前遍历到的输入字符串中的元素。
  • 一个指针指向当前答案添加元素的位置。
时间复杂度
  • 需要遍历输入的字符串,时间复杂度为 O ( n ) O(n) O(n)
  • 需要遍历答案,时间复杂度为 O ( n ) O(n) O(n)
  • 故时间复杂度为 O ( n ) O(n) O(n)
空间复杂度
  • 需要额外开一个字符串存储答案,故额外空间复杂度为 O ( n ) O(n) O(n)
C++代码
class Solution {
public:
    string replaceSpace(string s) {
        char ans[s.size() * 3 + 5];
        int id = 0;
        for (auto &x : s) {
            if (x == ' ') ans[id++] = '%', ans[id++] = '2', ans[id++] = '0';
            else ans[id++] = x;
        }
        ans[id] = 0;
        return ans;
    }
};




混一天和努力一天,一天看不出任何差别,三天看不到任何变化,七天也看不到任何距离……但是一个月后会看到话题不同,三个月后会看到气场不同,半年后会看到距离不同,一年后会看到人生道路截然不同。

————送给每个仍在为梦想努力奋斗的你




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值