剑指offer-4-替换空格

2023-11-14

问题

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

方案

该问题如果采用暴力方法:从前往后遍历,如果遇到空格,开始整体数据向后移动2位,插入%20,一直到结束。采用这样的方法,时间复杂度为 O ( n 2 ) O(n^2) O(n2),比较耗时间,也不是理想的方案。

上面的方案,可以看出有很大的改进空间,如果知道了空格的个数,直接从后往前遍历,这样每个元素都能放到最终位置,而不是向暴力方法那样移动很多步。即:从前往后进行遍历,找到字符串中空格的个数,然后从后往前遍历,放入最终位置。

代码:


#include <iostream>
#include <stdio.h>

using namespace std;

void replaceSpace(char *str, int length)
{
    if (str == NULL || length <= 0)
        return;

    int cnt = 0;
    int str_len = 0;

    //下面两种都是对str进行遍历,都可以

    //    char *p = str;
    //    while (*p != '\0') {
    //        ++str_len;
    //        if (*p == ' ')
    //            cnt++;
    //
    //        ++p;
    //    }

    for (int i = 0; str[i] != NULL; i++)
    {
        ++str_len;
        if (str[i] == ' ')
            cnt++;
    }

    if (str_len + cnt * 2 > length)
        return;

    //length += cnt;
    int new_len = str_len + cnt * 2;
    str[new_len + 1] = '\0';
    for (int i = new_len; i >= 0 && cnt > 0; --i)
    {
        if (str[str_len] != ' ')
        {
            str[i] = str[str_len];
        }
        else
        {
            str[i--] = '0';
            str[i--] = '2';
            str[i] = '%';
            cnt--;
        }

        --str_len;
    }
}

int main(int argc, char *argv[])
{
    char str[] = "we are happy";

    replaceSpace(str, 100);

    printf("%s\n", str);

    return 0;
}

其他:
本来很简单的题目,但自己没有设置好边界条件,加上写的过程中有几个小bug,调试了一会儿才发现问题,耗时1h才完全解决。太久不写代码的锅?

写作中遇到的几个bug:

  1. str[new_len] = '\0'; 总长度是怎么回事没想清楚
  2. for (int i = new_len -1; i >= 0 && cnt >= 0; --i) 这里还是对添加后的数组是怎样的情况不清晰,同时cnt这里的判断应该是cnt>0,不然设置这样的判断没任何效果。
  3. str[i] = str[str_len -- ]; 这里只有在if中str_len才-1,导致程序崩了。。。

几个点:边界条件这些应该在开始之前就想清楚,而不是写好后再找bug。此时这些bug潜藏得比较深,不容易发现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

剑指offer-4-替换空格 的相关文章

  • D - Loong and Takahashi (经典模拟绕圈)

    题目 https atcoder jp contests abc335 tasks abc335 d 思想 令 flag 0 1 2 3 分别代表四个方向右 下 左 上 然后判断下一步是否超过边界或者被填充过 如果是 就换方向 最后输出 代
  • CCF模拟题 202309-2 坐标变换(其二)

    问题描述 试题编号 202309 2 试题名称 坐标变换 其二 时间限制 1 0s 内存限制 512 0MB 问题描述 对于平面直角坐标系上的坐标 x y 小 P 定义了如下两种操作 1 拉伸 k 倍 横坐标 x 变为 kx 纵坐标 y 变
  • 基于粒子群算法的电动汽车充电动态优化策略研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据
  • 用通俗易懂的方式讲解:大模型 RAG 在 LangChain 中的应用实战

    Retrieval Augmented Generation RAG 是一种强大的技术 能够提高大型语言模型 LLM 的性能 使其能够从外部知识源中检索信息以生成更准确 具有上下文的回答 本文将详细介绍 RAG 在 LangChain 中的
  • 扬帆证券:国债逆回购基础知识?

    国债逆回购基础知识 1 生意单位 沪深两商场的国债逆回购门槛为1000元 以1000的整数倍递增 最小改变金额为0 005元 2 生意费用 国债逆回购的手续费和佣金大约为0 001 0 030 有些证券公司最低收费规范为1元 即在每笔生意缺
  • 关于整型提升与截断的一道题目

    关于整型提升与截断 可以看我的博客 C语言 整型提升 c语言整形提升 CSDN博客 C语言 截断 整型提升 算数转换练习 c语言unsigned CSDN博客 一 题目 二 题解 char a 101截断 由于101是整型数据 需要32比特
  • 2024年华为OD机试真题-小明找位置-Java-OD统一考试(C卷)

    题目描述 小朋友出操 按学号从小到大排成一列 小明来迟了 请你给小明出个主意 让他尽快找到他应该排的位置 算法复杂度要求不高于nLog n 学号为整数类型 队列规模 lt 10000 输入描述 1 第一行 输入已排成队列的小朋友的学号 正整
  • 【路径规划】基于A*算法路径规划研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • 蒙特卡洛在发电系统中的应用(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • 蒙特卡洛在发电系统中的应用(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • 2024年华为OD机试真题-手机App防沉迷系统-Java-OD统一考试(C卷)

    题目描述 智能手机方便了我们生活的同时 也侵占了我们不少的时间 手机App防沉迷系统 能够让我们每天合理的规划手机App使用时间 在正确的时间做正确的事 它的大概原理是这样的 1 在一天24小时内 可注册每个App的允许使用时段 2 一个时
  • 扬帆证券:成功投资的第一步:首次购买股票需要注意什么?

    关于第一次入市买股票的出资者来说 需求留意以下几点 1 股票的买卖规则 买卖时刻 早盘集合竞价9 15 9 25 尾盘集合竞价14 57 15 00 其中在9 15 9 20之间 出资者能够申报 也能够吊销申报 9 20 9 25之间 出资
  • 毕业设计- 基于深度学习的小样本时间序列预测算法 - Attention

    目录 前言 课题背景与意义 课题实现 一 数据集 二 设计思路 三 相关代码示例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着准备考研 考公 考教资或者实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校
  • 单向不带头链表的使用

    单向不带头链表的使用 链表的创建 typedef struct LNode SLDataType data struct LNode next LNode LinkList 按位查找 LNode GetElem LinkList L int
  • 【牛客周赛Round 27】题目讲解

    题目一 小红的二进制删数字 小红拿到了一个二进制字符串 s 她可以删掉其中的一些字符 使得最终该字符串为一个2的幂 即可以表示为 2 k 形式的数 小红想知道 自己最少删几个字符可以达成 请你编写一个函数返回这个答案 具体思路 看到这道题目
  • 华为OD机试2024年最新题库(Java)

    我是一名软件开发培训机构老师 我的学生已经有上百人通过了华为OD机试 学生们每次考完试 会把题目拿出来一起交流分享 重要 2024年1月 5月 考的都是OD统一考试 C卷 题库已经整理好了 命中率95 以上 这个专栏使用 Java 解法 问
  • 「优选算法刷题」:移动零

    嗨 这个假期罗根开始接触了算法 在为今年的蓝桥杯做准备 所以 开个新专栏 记录记录自己做算法题时的心得 一 题目 给定一个数组 nums 编写一个函数将所有 0 移动到数组的末尾 同时保持非零元素的相对顺序 请注意 必须在不复制数组的情况下
  • 【EI复现】基于深度强化学习的微能源网能量管理与优化策略研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 有 无策略奖励 2 2 训练结果1
  • 『力扣刷题本』:逆波兰表达式求值

    大家好久不昂 最近 1 个多月罗根一直在备考期末 文章发的很少 现在已经放寒假啦 学习自然也不能拉下 毕竟 4 月份就要去参加蓝桥杯了 先给自己定个小目标 日更 2 篇 咳咳 下面马上开始讲题 一 题目 给你一个字符串数组 tokens 表
  • 扬帆证券:A股高股息资产“画像”:连续数年跑赢大盘

    近期A股分红 大方 股息率较高的板块再次引起关注 走势显着强于同期大盘 并继续遭到商场追捧 有专家在接受证券时报记者采访时以为 近年A股商场高股息财物受捧背面 有多种要素在发挥作用 包含高股息财物本身具有的出资优势 微观经济布景 出资者心态

随机推荐

  • TSP(旅行者问题)——动态规划详解

    1 问题定义 TSP问题 旅行商问题 是指旅行家要旅行n个城市 要求各个城市经历且仅经历一次然后回到出发城市 并要求所走的路程最短 假设现在有四个城市 0 1 2 3 他们之间的代价如图一 可以存成二维表的形式 图一 现在要从城市0出发 最
  • OpenMP GPU并行计算

    GPU并行计算 一 C源码 gpustbench c 1 OpenMP与MPI 二 Linux中编译运行 三 执行命令 四 查看运行结果 一 C源码 gpustbench c GPU并行计算能力 计算矩阵行列式 任一行的各元素与其对应的代数
  • Linux环境下,安装libevent库

    前言 最近在进行网络编程的学习 在安装libevent库时 遇到了各种各样的问题 最后通过一条条的去搜索问题关键字 费尽千辛万苦 终于完成了安装 也能够成功的运行起来其中所提供的案例代码 所以在这里将各种零碎的问题以及解决方案整理一下 帮助
  • 联想 计算机无线网络设置方法,联想笔记本无线网络开关,详细教您联想笔记本无线网络开关...

    联想笔记本是联想集团生产的可携带的笔记本 可帮助我们娱乐 办公 笔记本电脑在生活办公中使用很方便 有时候想要连接无线网却看不到图标 一般来说笔记本电脑都配有无线网络快捷开关 那么怎么打开笔记本无线网络 下面 小编给大家介绍联想笔记本无线网络
  • CARLA pygame window界面大小调节两种方法-Ubuntu18.04

    CARLA pygame window界面大小调节两种方法 Ubuntu18 04 文章目录 前言 一 crala安装 二 pygame window界面界面大小调节方法 1 打开manual control py修改分辨率 2 打开设置
  • 记一次安装plsql,踩坑踩到人麻了!

    大家好 我是鱼尾 开门见山 有事说事吧 记一次安装plsql 踩坑踩到人麻了 说到这里了 那么什么是plsql呢 PL SQL也是一种程序语言 叫做过程化SQL语言 Procedural Language SQL PL SQL是Oracle
  • 无名图书(网站)

    首先 这个电子书资源网站 里面的资源涵盖面广非常的齐全 包含有文学类 社会文化 历史 经济 自然科学 理工科 美食旅行 政治 计算机 设计 思想 健康 生物 建筑 绘本 天文等等 完全能满足日常使用需求 网站支持搜索功能 小伙伴们可以通过搜
  • Blender2.5快捷键

    Blender2 5快捷键 整理了最全面的快捷键和解释 希望大家继续补充 Basics 基础 CTRL U Save as Default 保存界面 Right Click Select 选择 Middle Click Pan 平移视角 M
  • python大作业爬虫_Python大作业---微博爬虫及简单数据分析

    刚开始学python 选了这个题目 把代码放上来留念 没有用到很流行的框架 所以代码量挺大 GUI用wxpython写的 coding UTF 8 import os import re import requests import sys
  • 上传本地jar包文件到私服

    一 公司的项目上传到公司私服 使用idea中maven的install将项目打包 放到本地仓库 install三个关键步骤 将项目打包成jar包放到项目的target目录下 这一步等同于mvn package命令的操作 将jar包insta
  • java 比较日期差值_日期的大小比较及差值计算

    一 LocalDate 的 isBefore isAfter 返回值为 boolean 类型 public static void main String args LocalDate ld LocalDate now LocalDate
  • Ubuntu系统下安装NVIDIA驱动

    介绍两种不同的方法 这两种方法基本不会出现任何问题 1 直接使用系统的apt get进行nvidia的安装 具体参考自这篇https blog csdn net breeze5428 article details 80013753 具体步
  • [论文阅读] (10)基于溯源图的APT攻击检测安全顶会总结

    娜璋带你读论文 系列主要是督促自己阅读优秀论文及听取学术讲座 并分享给大家 希望您喜欢 由于作者的英文水平和学术能力不高 需要不断提升 所以还请大家批评指正 非常欢迎大家给我留言评论 学术路上期待与您前行 加油 前一篇文章分享了S P201
  • 更新预告:chatGPT知识树。

    从一个知识点出发 无限扩展到无数个子知识点 是学习 了解其他行业知识 专业技能的利器 10分钟 就可以对一个行业 一个专业有大概 又专业的了解 简单列2个例子 让你感受下神的强大 上线时间 2023 9 7 体验地址 https ppwor
  • 浅谈Android原生开发现状,终究是错付了

    浅谈Android原生开发现状 终究是错付了 客户端3年内必死 小程序 跨端方案盛行 很多公司已经开始裁客户端了 这不是危言耸听 不少同行已经发声 客户端面临的危机前所未有 前端跨平台和小程序蚕食移动端市场 客户端行业内部内卷严重 同行一直
  • planet-lab平台的布置

    最近需要把国家自然基金项目赶快结题 所以导师也催的紧 正好自己也在研究网格和高性能计算 所以老板就把部署planet lab环境的任务交给我 鄙人英语很烂 所以花了很长时间的去读指导书 最后基本上搞定 但是还有问题 希望网友们能给我点解答
  • Android Binder 系统级使用demo

    Android System Binder Usage 添加系统级服务Java C Server Client https github com qianjigui android system service exampleAndroid
  • 华为OD机试 -自动售货系统(C++ & Java & JS & Python)

    描述 1 总体说明 考生需要模拟实现一个简单的自动售货系统 实现投币 购买商品 退币 查询库存商品及存钱盒信息的功能 系统初始化时自动售货机中商品为6种商品 商品的单价参见1 1规格说明 存钱盒内放置1元 2元 5元 10元钱币 商品数量和
  • 用户登录JWT技术,Redis存储token,登录拦截

    SpringBoot项目 用户登录JWT技术 登录拦截 1 JWT技术 登录使用JWT技术 jwt 可以生成 一个加密的token 做为用户登录的令牌 当用户登录成功之后 发放给客户端 请求需要登录的资源或者接口的时候 将token携带 后
  • 剑指offer-4-替换空格

    问题 请实现一个函数 将一个字符串中的每个空格替换成 20 例如 当字符串为We Are Happy 则经过替换之后的字符串为We 20Are 20Happy 方案 该问题如果采用暴力方法 从前往后遍历 如果遇到空格 开始整体数据向后移动2