每日一练(2):替换空格

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

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


示例 1:


输入:s = "We are happy."

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


限制:


0 <= s 的长度 <= 10000


来源:力扣(LeetCode)


链接:https://leetcode-cn.com/probl...


方法一:原地修改


由于需要将空格替换为 "%20" ,字符串的总字符数增加,因此需要扩展原字符串 s 的长度,计算公式为:新字符串长度 = 原字符串长度 + 2 * 空格个数


算法流程:


1.初始化:空格数量 count ,字符串 s 的长度 len ;

2.统计空格数量:遍历 s ,遇空格则 count++ ;

3.修改 s 长度:添加完 "%20" 后的字符串长度应为 len + 2 * count ;

4.倒序遍历修改:i 指向新字符串尾部元素, j 指向原字符串尾部元素;当 i = j 时跳出(代表左方已没有空格,无需继续遍历);


  • 当 s[i] 不为空格时:执行 s[j] = s[i] ;
  • 当 s[i] 为空格时:将字符串闭区间 [j-2, j] 的元素修改为 "%20" ;由于修改了 3 个元素,因此需要 j -= 2 ;


5.返回值:已修改的字符串 s ;


复杂度分析:


  • 时间复杂度 O(N) : 遍历统计、遍历修改皆使用 O(N)时间。
  • 空间复杂度 O(1): 由于是原地扩展 s 长度,因此使用 O(1) 额外空间。


string replaceSpace(string s) {
    int count = 0; // 统计空格个数
    int oldSize = s.size();
    for(int i = 0; i < oldSize; i++) {
        if (s[i] = ' ') {
            count++;
        }
    }
    // 扩充字符串s的大小,申请空格替换“%20”之后的大小空间
    s.resize(oldSize + 2 * count);
       int newSize = s.size();
    // 从后往前将空格替换“%20”(倒序遍历替换)
    for(int i = newSize - 1, j = oldSize - 1; j < i; i--, j--) {
        if (s[i] != ' ') {
            s[j] = s[i];
        } else {
            s[j - 2] = '%';
            s[j - 1] = '2';
            s[j] = '0';
            j -= 2;
        }
    }
    return s;
}


方法二:遍历添加


算法流程:


用新字符串,遇到空格就拼接%20


1.用一个新字符串res

2.遍历,遇到空格就拼接%20

3.没有遇到空格就执行else

4.返回新字符串res


复杂度分析:


  • 空间复杂度 O(n)
  • 时间复杂度 O(n)


string replaceSpaces(string &str) {
    string res;
    for (auto x : str) { //遍历添加
        if (x == ' ') {
            res += "%20";
        } else {
               res += x;
        }
    }
    return res;
}


目录
相关文章
|
1天前
|
人工智能 JavaScript Linux
【Claude Code 全攻略】终端AI编程助手从入门到进阶(2026最新版)
Claude Code是Anthropic推出的终端原生AI编程助手,支持40+语言、200k超长上下文,无需切换IDE即可实现代码生成、调试、项目导航与自动化任务。本文详解其安装配置、四大核心功能及进阶技巧,助你全面提升开发效率,搭配GitHub Copilot使用更佳。
|
3天前
|
存储 人工智能 自然语言处理
OpenSpec技术规范+实例应用
OpenSpec 是面向 AI 智能体的轻量级规范驱动开发框架,通过“提案-审查-实施-归档”工作流,解决 AI 编程中的需求偏移与不可预测性问题。它以机器可读的规范为“单一真相源”,将模糊提示转化为可落地的工程实践,助力开发者高效构建稳定、可审计的生产级系统,实现从“凭感觉聊天”到“按规范开发”的跃迁。
617 11
|
7天前
|
存储 JavaScript 前端开发
JavaScript基础
本节讲解JavaScript基础核心知识:涵盖值类型与引用类型区别、typeof检测类型及局限性、===与==差异及应用场景、内置函数与对象、原型链五规则、属性查找机制、instanceof原理,以及this指向和箭头函数中this的绑定时机。重点突出类型判断、原型继承与this机制,助力深入理解JS面向对象机制。(238字)
|
6天前
|
云安全 人工智能 安全
阿里云2026云上安全健康体检正式开启
新年启程,来为云上环境做一次“深度体检”
1622 6
|
3天前
|
消息中间件 人工智能 Kubernetes
阿里云云原生应用平台岗位急招,加入我们,打造 AI 最强基础设施
云原生应用平台作为中国最大云计算公司的基石,现全面转向 AI,打造 AI 时代最强基础设施。寻找热爱技术、具备工程极致追求的架构师、极客与算法专家,共同重构计算、定义未来。杭州、北京、深圳、上海热招中,让我们一起在云端,重构 AI 的未来。
|
5天前
|
IDE 开发工具 C语言
【2026最新】VS2026下载安装使用保姆级教程(附安装包+图文步骤)
Visual Studio 2026是微软推出的最新Windows专属IDE,启动更快、内存占用更低,支持C++、Python等开发。推荐免费的Community版,安装简便,适合初学者与个人开发者使用。
653 11
|
8天前
|
缓存 算法 关系型数据库
深入浅出分布式 ID 生成方案:从原理到业界主流实现
本文深入探讨分布式ID的生成原理与主流解决方案,解析百度UidGenerator、滴滴TinyID及美团Leaf的核心设计,涵盖Snowflake算法、号段模式与双Buffer优化,助你掌握高并发下全局唯一ID的实现精髓。
372 160
|
8天前
|
人工智能 自然语言处理 API
n8n:流程自动化、智能化利器
流程自动化助你在重复的业务流程中节省时间,可通过自然语言直接创建工作流啦。
460 6
n8n:流程自动化、智能化利器
|
5天前
|
人工智能 Shell 开发工具
Claude Code 2.1.2超详细更新说明,小白也能10分钟上手
Claude Code 2.1.x重磅更新:Shift+Enter换行、Esc+Esc撤销、Ctrl+B后台运行,Skills技能系统全面升级,支持多语言、通配符权限与动态MCP检测,性能提升50%,迭代速度惊人,开发者效率暴涨!
Claude Code 2.1.2超详细更新说明,小白也能10分钟上手