【一刷《剑指Offer》】面试题 4:替换空格

news2024/12/26 11:05:44

力扣对应链接:LCR 122. 路径加密 - 力扣(LeetCode)

牛客对应链接:替换空格_牛客题霸_牛客网 (nowcoder.com)

核心考点 :字符串相关,特性观察,临界条件处理。

一、《剑指Offer》内容


二、分析问题

虽然是替换问题,但是生成的字符串整体变长了。因替换内容比被替换内容长,所以一定涉及到字符串中字符的移动问题。移动方向一定是向后移动,所以现在的问题无非是移动多少的问题。
因为是 ' ' -> "%20",是 1 换 3,所以可以先统计原字符串中空格的个数(设为 n),然后可以计算出新字符串的长度。所以,new_length = old_length + 2*n
最后,定义新老索引(或者指针),各自指向新老空间的结尾,然后进行 old->new 的移动。如果是空格,就连续放入“%20”,其他平移即可。
当然,C++ 有很多容器,也可以从前往后通过开辟空间来进行解决,也就是使用空间来换取时间。但是,最好不要在面试场景下这么做。

三、代码

//力扣上的这道题目是1换1,不需要扩充数组
class Solution {
public:
    string pathEncryption(string path) {
        for(int i=0; i<path.size(); i++)
            if(path[i]=='.')
                path[i]=' ';
        return path;
    }
};

//牛客网上的这道题目和原题也不太一样,这里传入的是string,原题是char*
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return string字符串
     */
    string replaceSpace(string s) {
        string res;
        for(int i=0; i<s.size(); i++)
        {
            if(s[i]==' ') res+="%20";
            else res+=s[i];
        }
        return res;
    }
};

//下面写法尽量贴近原题(注意:原题是char*,C++要考虑'\0')
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return string字符串
     */
    string replaceSpace(string s) {
        if(s.size()==0) return s;
        int cnt=0; //记录空格个数
        for(auto c:s)
        {
            if(c==' ')
                cnt++;
        }
        int old_end=s.size()-1;
        for(int i=0; i<cnt*2; i++)
            s.push_back(' ');
        int new_end=s.size()-1;
        while(old_end>=0 && new_end>=0)
        {
            if(s[old_end]==' ')
            {
                s[new_end--]='0';
                s[new_end--]='2';
                s[new_end--]='%';
                old_end--;
            }
            else
            {
                s[new_end--]=s[old_end--];
            }
        }
        return s;
    }
};

四、扩展

有两个排序的数组 A1 和 A2,内存在 A1 的末尾有足够多的空余空间容纳 A2。请实现一个函数,把 A2 中的所有数字插入到 A1 中并且所有的数字是排序的。

和前面的例题一样,首先想到的办法可能是从前到尾复制数字,但这样就会出现多次复制一个数字的情况。

更好的办法是从尾到头比较 A1 和 A2 中的数字,并把较大的数字赋值到 A1 的合适位置。

C 库函数中内存拷贝 memmove() 函数与此题有共同点,函数功能就是:将起始地址 src 且长度为 count 的内存拷贝到起始地址 dst 处,并返回 dst,返回是为了实现链式表达式。
函数原型为:void* __cdecl memmove(void *dst, const void *src, size_t count; 


五、举一反三

合并两个数字(包括字符串)时,如果从前往后复制每个数字(或字符)需要重复移动数字(或字符)多次,那么我们可以考虑从后往前复制,这样就能减少移动的次数,从而提高效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1602247.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AlgorithmDay14

day14 二叉树基础 二叉树的种类 满二叉树 只有度为0和2的结点&#xff0c;并且度为0的结点在同一层 &#xff08;深度为k 有2^k-1个结点&#xff09; 完全二叉树 除了最底层可能每天&#xff0c;其余都填满了&#xff0c; 并且最底层的结点集中在该层的左边位置。 二叉…

机器学习引领金融革命:重塑金融服务领域新格局,开启智能化新篇章

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

C:Jump and Treasure(单调队列优化DP+调和级数)

题意&#xff1a;给你一个0到n的柱子&#xff0c;一开始在0&#xff0c;需要跳到大于n的地方&#xff0c;每个柱子上有个得分&#xff0c; 且限制了最大跳跃步数&#xff1b; 思路&#xff1a;一般很容易想到一个 n*p 时间复杂度的DP , 表示以 i 为结尾的最大得分然后枚举前p…

【4月17日】阿里云 腾讯云 京东云 2-64G服务器选择对比 配置、价格全盘点 搭建博客、网站、个人开发建议收藏

更新日期&#xff1a;4月17日&#xff08;阿里云继续保持1.5折&#xff0c;京东云采购季持续进行&#xff09; 本文纯原创&#xff0c;侵权必究 《最新对比表》已更新在文章头部—腾讯云文档&#xff0c;文章具有时效性&#xff0c;请以腾讯文档为准&#xff01; 【腾讯文档实…

socket编程——tcp

在我这篇博客&#xff1a;网络——socket编程中介绍了关于socket编程的一些必要的知识&#xff0c;以及介绍了使用套接字在udp协议下如何通信&#xff0c;这篇博客中&#xff0c;我将会介绍如何使用套接字以及tcp协议进行网络通信。 1. 前置准备 在进行编写代码之前&#xff…

最新版idea 合并分支方法

前言 以下是最新版的idea2024&#xff0c;如果有人找不到按键可能是因为版本不同。 操作步骤 看右小角我的分支是submit&#xff0c;现在我要将test合并到我的submit分支上 找到test分支&#xff0c;选择update&#xff0c;这一步会拉取相应分支内容等同于pull 选择merge 选…

能源成果3D网络三维展厅越发主流化

在这个数字化飞速发展的时代&#xff0c;我们为您带来了全新的展览形式——线上3D虚拟展厅。借助VR虚拟现实制作和web3d开发技术&#xff0c;我们能够将物品、图片、视频和图文信息等完美融合&#xff0c;通过计算机技术和3D建模&#xff0c;为您呈现一个逼真、生动的数字化展览…

【保姆级】frp内网穿透

场景&#xff1a;本地调试微信生态的回调时&#xff0c;如果全用线上调试&#xff0c;那就太恶心人了&#xff0c;所以我们今天简单说下frp内网穿透 一、安装和配置 frp下载地址&#xff1a; https://github.com/fatedier/frp/releases 简单说一下&#xff1a; 服务器用的是f…

包装类的认识

前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&#x1…

储能的全生命周期成本即平准化度电成本的计算方法及python实践

1. 平准化度电成本&#xff08;LCOE&#xff09;是一种衡量电力项目经济性的指标 LCOE&#xff08;Levelized Cost of Energy,&#xff09;的概念最早由美国国家可再生能源实验室&#xff08;NREL&#xff09;在1995年提出&#xff0c;它是通过将一个项目生命周期内的所有成本…

什么牌子的短袖t恤质量好?2024年高品质短袖推荐!

什么牌子的短袖质量好&#xff1f;最近大部分地区的天气都比较热&#xff0c;大家对短袖的关注度日益提升。然而作为一名十年以上的经验的服装测评师&#xff0c;我必须强调市面上有许多所谓网红品牌&#xff0c;虽然广告营销做得沸沸扬扬&#xff0c;但对短袖的做工、细节方面…

ELK日志分析系统(上)

目录 引言 一、ELK日志分析系统简介 1.1 日志服务器 1.2 ELK日志分析系统的组成 1.3 日志处理步骤 二、Elasticsearch介绍 2.1 概述 2.2 核心概念 三、Logstash介绍 3.1 概述 3.2 主要组件 四、Kibana介绍 4.1 概述 4.2 主要功能 五、ELK的工作原理 六、部署ELK…

二维码电子画册制作教程,教你如何做出高端作品!

当今社会&#xff0c;二维码已经成为了信息传递的重要方式之一&#xff0c;其在电子商务、广告营销、活动推广等领域广泛应用。而如何将二维码巧妙地融入电子画册中&#xff0c;制作出高端、具有吸引力的作品&#xff0c;成为了许多设计师和营销人员关注的焦点 但是很多人却不知…

HTTP协议详解:从URL到HTTP报文的全貌

⭐小白苦学IT的博客主页⭐ ⭐初学者必看&#xff1a;Linux操作系统入门⭐ ⭐代码仓库&#xff1a;Linux代码仓库⭐ ❤关注我一起讨论和学习Linux系统 前言 随着互联网的飞速发展&#xff0c;HTTP协议作为支撑网络应用的核心基石&#xff0c;扮演着举足轻重的角色。无论是日常的…

LDR6028,充电听歌两不误!

当前市场上的手机普遍取消了3.5mm耳机接口&#xff0c;仅保留Type-C接口。然而&#xff0c;对于音质和零延迟有追求的用户&#xff0c;仍倾向于选择3.5mm有线耳机&#xff0c;特别是在玩游戏时&#xff0c;音画同步至关重要。因此&#xff0c;Type-C转3.5mm接口线应运而生&…

Oracle11.2.0.1,(CVE-2012-1675)漏洞解决方案

1.进入容器停止监听 docker exec -it -u 0 oracle11g bash su - oracle lsnrctl stop listener2.找到监听配置文件位置&#xff0c;修改监听文件 echo $ORACLE_HOMEvi network/admin/listener.ora #在文件底部添加 SECURE_REGISTER_LISTENER (IPC) #启动监听 lsnrctl start …

《量化投资以Python为工具》目录

《量化投资以Python为工具》 获取链接&#xff1a;《量化投资以Python为工具》 更多技术书籍&#xff1a;技术书籍分享&#xff0c;前端、后端、大数据、AI、人工智能... ​ ​ ​ ​

【实战】Dubbo应用可观测性升级指南与踩坑记录

应用从dubbo-3.1.*升级到dubbo-*:3.2.*最新稳定版本&#xff0c;提升dubbo应用的可观测性和度量数据准确性。 1. dubbo版本发布说明(可不关注) dubbo版本发布 https://github.com/apache/dubbo/releases 【升级兼容性】3.1 升级到 3.2 2. 应用修改点 注意&#xff1a;Sprin…

大模型用到的位置编码汇总(面试)

不同于RNN、CNN等模型&#xff0c;对于Transformer模型来说&#xff0c;位置编码的加入是必不可少的&#xff0c;因为纯粹的Attention模块是无法捕捉输入顺序的&#xff0c;即无法区分不同位置的Token。为此我们大体有两个选择&#xff1a;想办法将位置信息融入到输入中&#x…

第一部分-基础入门-学习导航

专题地址:MacOS一站式程序开发系列专题 第一部分:基础入门学习导航 OSX-01-Mac OS应用开发概述:简单介绍下MacOS生态、Xcode使用以及使用Xcode创建app的方法OSX-02-Mac OS应用开发系列课程大纲和章节内容设计:介绍下此系列专题的文章内容组织形式以及此系列专题的覆盖内容…