字符串,把这个碍眼的空格给我换掉!

简介: 字符串,把这个碍眼的空格给我换掉!

大家好呀,我是事事儿的蛋蛋。


今天来搞替换空格,没啥说的,直接冲


640.png


   剑指 Offer 05:替换空格



题意


把字符串 s 中的每个空格替换成 "%20"



示例


输入:s = "We are happy."

输出:"We%20are%20happy."


提示


0 <= length(s) <= 10000


题目解析


水题,难度简单。


字符串这边的题大多数都是可以用编程语言自带的库函数解决的,但是我们在 LeetCode 上刷题初期显然不能这样。


我们现在刷题的目的是为了更好的理解数据结构与算法,更好的理解一些封装起来的库函数是怎么实现的,而不是简简单单的为了刷题而刷题。


这道题的解法也不复杂,就是遍历整个字符串 s:


  • 碰到非空格就继续走。
  • 碰到空格就替换。

图解


以 s = "We are happy." 为例。为了方便表示,我以下面的形式表示整个字符串。

640.png

在这维护一个结果列表 res,遍历字符串,刚开始碰到的是 "we",直接加入 res。


640.png


if c != ' ':
    res.append(c)


接下俩碰到空格,替换为 "%20",加入列表。640.png



if c == ' ':
    res.append('%20')

接下来依次按照上面的情况进行,直至列表遍历完。


640.png


本题的解法从左到右遍历整个字符串,所以时间复杂度为 O(n)


时间复杂度还是按照你用的编程语言来算,如果字符串可修改的编程语言,比如 Python、Java,需要维护一个新的列表,这个的空间复杂度为 O(n),像可原地修改字符串的编程语言,比如 C++,这样的空间复杂度为 O(1)


代码实现


Python 代码实现

class Solution:
    def replaceSpace(self, s: str) -> str:
        # python 字符串不可修改,所以维护一个列表
        res = []
        for c in s:
            if c == ' ':
                res.append('%20')
            else:
                res.append(c)
        return ''.join(res)


Java 代码实现


class Solution {
    public String replaceSpace(String s) {
        StringBuilder res = new StringBuilder();
        for(Character c : s.toCharArray())
        {
            if(c == ' ') res.append("%20");
            else res.append(c);
        }
        return res.toString();
    }
}


图解替换空格到这就结束辣,是不是不用库函数也很简单?


醒醒,这才是道简单题,也就比 ”Hello World“ 难一丢丢,难题还在后面,不要飘。


不过,可以给我多点点赞在看,让我飘起来呀。


哈哈哈,我是帅蛋,我们下次见。



640.gif



相关文章
|
3月前
|
安全 Java API
SpringBoot 4 黑科技:接口组 ——10 行代码管理 100+ API 客户端
Spring 7 新增「HTTP接口组」特性,告别重复`@Bean`声明与手动配置。通过`@ImportHttpServices`按业务分组(如github、stackoverflow),支持统一超时、Token、baseUrl等配置,Java代码+YAML双驱动,大幅降低配置冗余,提升可维护性与开发效率。(239字)
318 3
|
7月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
868 7
|
11月前
|
缓存 监控 Android开发
App Trace 快速安装解析(开发者视角)
App Trace 是一款应用性能监控工具,可追踪启动时间、方法耗时及卡顿等指标,助力开发调试与性能优化。支持 Android 和 iOS 平台,提供依赖引入、初始化配置和自动化脚本等快速安装方案,同时包含采样率、本地缓存等高级配置选项。集成后可通过日志检查与测试事件验证功能,注意在发布版本中使用 no-op 版本以减少性能影响,并确保隐私合规。
|
9月前
|
存储 弹性计算 缓存
企业级云服务器租用一年需要多少预算?199元2核4G5M带宽阿里云u1实例评测
阿里云企业用户专享,仅需199元/年即可租用ECS通用算力型u1实例(2核4G、5M带宽、80G云盘),适用于中小企业官网、电商展示、数据分析等场景。支持多地域部署,新老用户均可享受,性价比高,助力企业稳定运营。
624 7
|
6月前
|
编解码 数据可视化 搜索推荐
阿里云特惠云服务器解析:38元、99元、199元,多款云服务器任你选,满足多样需求
2025年阿里云有哪些适用性强价格又实惠的高性价比云服务器?对于寻求高性价比云服务器的用户而言,阿里云无疑是一个不可多得的选择。本文将为大家解析阿里云当下推出的几款极具性价比的云服务器,包括价格低至38元的轻量应用服务器,以及99元、199元等不同价位的云服务器,更有新品u2i和九代云服务器特惠,助您轻松选购,满足多样需求。
|
6月前
|
域名解析 缓存 网络协议
域名没输错却进了假网站?DNS欺骗防范指南
DNS欺骗如同网络“假路标”,篡改域名解析将用户引向伪造网站,窃取信息或传播 malware。其隐蔽性强,危害大,可致数据泄露、设备被控。防范方法包括:使用公共DNS(如114.114.114.114)、开启HTTPS、采用DoH/DoT加密解析。简单设置,即可大幅提升上网安全。
1713 0
域名没输错却进了假网站?DNS欺骗防范指南
|
10月前
|
Linux C++
每天一个linux命令(8):cp 命令
cp 命令是 Linux 中用于复制文件或目录的命令。它的名字来源于英文单词 copy。这个命令非常常用,特别是在需要备份文件或创建文件副本时。
651 0
|
传感器 监控 网络协议
OSI 物理层详解
本文介绍了多种传输介质及其特性,包括双绞线、光纤、同轴电缆和无线介质。双绞线成本低、易于安装,适合短距离传输;光纤具有大带宽、远距离传输和高安全性,适用于数据中心互联和广域网;同轴电缆抗干扰能力强,但安装复杂;无线介质通过电磁波传输,2.4GHz覆盖广但速度慢,5GHz速度快但穿墙能力弱。此外,文章还提及了曼彻斯特编码的特点与应用,以及传输速率单位bps的定义与换算方法,为网络规划提供了理论依据。
538 5
|
人工智能 关系型数据库 MySQL
AnalyticDB MySQL版:云原生离在线一体化数据仓库支持实时业务决策
AnalyticDB MySQL版是阿里云推出的云原生离在线一体化数据仓库,支持实时业务决策。产品定位为兼具数据库应用性和大数据处理能力的数仓,适用于大规模数据分析场景。核心技术包括混合负载、异构加速、智能弹性与硬件优化及AI集成,支持流批一体架构和物化视图等功能,帮助用户实现高效、低成本的数据处理与分析。通过存算分离和智能调度,AnalyticDB MySQL可在复杂查询和突发流量下提供卓越性能,并结合AI技术提升数据价值挖掘能力。
511 16