【剑指offer - C++/Java】2、替换空格

学习交流加

  • 个人qq:
    1126137994
  • 个人微信:
    liu1126137994
  • 学习交流资源分享qq群:
    962535112

题目链接:
替换空格

文章目录

  • 题目描述
    • 解题思路
    • 总结

题目描述

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

注意:C++解法中,给定的字符串结尾后面还有一定的空间,不然我们还得重新给它分配足够的内存空间才能将空格换成%20。在写题过程中,我们需要判断替换后的字符串是否会超过给定的内存空间长度,超过了就直接返回。Java解法需要自己重新分配内存空间。

解题思路

O(n2)的思路就不写了,直接就是从前开始遍历,遇到空格就将后面所有剩余的字符串往后移动两个位置,然后前面的空格后面就多了两个空位置,写上%20即可。

O(n)的解法:
这种题型,要很容易想到从后往前扫描字符串。我们可以这样:先计算出该字符串有几个空格,然后算出替换后的字符串一共需要多少空间的长度。我们从字符串的后面开始准备复制和替换。可以看以下图示过程:

其中,p2是指向替换后字符串的结尾处应该在哪里,p1是指向替换前,字符串的结尾处。

我们从字符串的后面开始复制和替换,当p1指向的是字符,则将字符复制给p2位置。同时,p1和p2同时向前移动。当p1遇到空格,则p2处赋值字符’0’;p2再向前移动一格,p2处赋值字符’2’;p2再向前移动一格,p2处赋值字符’%’。然后p1和p2再同时向前移动一格。以此类推最终将所有空格替换完成。

java代码:

public class Solution {public String replaceSpace(StringBuffer str) {int knum=0;/*计算空格的数量与字符串的长度*/for(int i=0;i<str.length();i++){if(str.charAt(i)==' ')knum++;}/* 替换空格后的字符串的长度 */int newlen=str.length()+2*knum;int p1=str.length()-1,p2=newlen-1;str.setLength(newlen);while(p1>=0 && p2>p1){sif(str.charAt(p1)==' '){str.setCharAt(p2--, '0');str.setCharAt(p2--, '2');str.setCharAt(p2--, '%');--p1;}else{str.setCharAt(p2--, str.charAt(p1--));}}return str.toString();}
}

C++代码:

class Solution {
public:void replaceSpace(char *str,int length) {int strlen=0,knum=0,i=0;/*计算空格的数量与字符串的长度*/while(str[i]!='\0'){strlen++;if(str[i]==' ') ++knum;i++;}/* 替换空格后的字符串的长度 */int newlen=strlen+2*knum;/* 如果替换后的长度超过了给出的固定长度则返回 */if(newlen>length)return;int p1=strlen,p2=newlen;while(p1>=0 && p2>p1){if(str[p1]==' '){str[p2--]='0';str[p2--]='2';str[p2--]='%';--p1;}else{str[p2--]=str[p1--];}}}
};

总结

遇到这种字符串替换的问题,如果时间复杂度达到O(n2),则考虑从后往前替换。同时注意要将复制的过程用图示画出来,才不会导致编程出错。

探讨学习加:
qq:1126137994
微信:liu1126137994

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

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

相关文章

c#保留小数点后位数的方法

c#保留小数点后位数的方法 Double dValue 95.12345; int iValue 10000; string strValue "95.12345"; string result ""; result Convert.ToDouble(dValue).ToString("0.00");//保留小数点后两位,结果为95.12 …

数据仓设计

TOC 数据仓库&#xff0c;这里采用层级的设计方式&#xff0c;设计的粒度&#xff0c;依据业务的复杂度而定&#xff1b; 这里只是介绍 数据仓库的设计&#xff0c;后续补充一下&#xff0c;具体的实现细节和使用工具&#xff1b;

【OS学习笔记】一 处理器、内存和指令

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 我们已经知道&#xff0c;处理器是一台电子计算机的核心&#xff0c;它会在振荡器脉冲的激励下&#xff0c;从内存中获取指令&#xff0c;并发起一系列…

AS3 CookBook学习整理(八)

1. AS3的事件机制 事件流机制即为捕获--目标--冒泡,分别对应event.eventPhase的值1(EventPhase.CAPTURING_PHASE)&#xff0c;2(EventPhase.AT_TARGET)&#xff0c;3(EventPhase.BUBBLING_PHASE) 假设有3个Sprite&#xff0c;分别为绿、蓝、黄(如图),层叠关系为绿色包含蓝色&am…

边缘计算+云计算

后续更新中 边缘计算云计算&#xff1a; 促进企业数字化向数智化发展概念1.以下是边缘计算的四个组织2. 边缘设备对IoT的增强作用 &#xff08;更新&#xff09;3. 边缘计算应用于IoT的四个层次4. AI在边缘设备计算领域的三种应用场景5. 云服务架构6.案例解析6.1国家电网&#…

参商

人生不相见&#xff0c;动如参与商。今夕复何夕&#xff0c;共此灯烛光。 少壮能几时&#xff0c;鬓发各已苍。访旧半为鬼&#xff0c;惊呼热中肠。 焉知二十载&#xff0c;重上君子堂。昔别君未婚&#xff0c;儿女忽成行。 怡然敬父执&#xff0c;问我来何方。问答乃未已&a…

CSS强制按比例缩小图片

<title>CSS强制按比例缩小图片</title><style>img,a img{ border:0; margin:0; padding:0; max-width:200px; width:expression(this.width>200?"200px":this.width); max-height:200px; height:expression(this.height>200?"200px…

【剑指offer - C++/Java】3、从尾到头打印链表

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 牛客网题目链接&#xff1a; 从尾到头打印链表 文章目录题目描述1、递归解法1.1、 递归解法一java代码&#xff1a;C代码分析&#xff1a;1.2 递归解法…

网络协议之http和tcp思维导图

http协议和tcp协议之前学的整理一部分&#xff0c;后续更新

Oracle 10g Audit(审计) --- 记录登录用户在Oracle中的所有操作(转)

由于项目平台管理的需要&#xff0c;最近在研究Oracle 10G的审计功能&#xff0c;以便记录和跟踪用户在Oracle数据库系统中的所有操作行为&#xff0c;进而提高Oracle的安全性。现在把审计功能的配置步骤分享出来&#xff0c;供大家参考&#xff1a; 1、以DBA登录Oracle # su -…

【剑指offer - C++/Java】4、重建二叉树

牛客网题目链接&#xff1a;重建二叉树 文章目录0 题目描述&#xff1a;1、题目分析2、代码2.1、java代码2.2 C代码3、总结0 题目描述&#xff1a; 输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字…

Windows下Android开发环境 搭建

1、 下载Android SDK &#xff08;1&#xff09;官网下载解压后即可用。 在http://androidappdocs.appspot.com/sdk/index.html 下选择 合适自己的平台下载&#xff0c;下载后解压 运行 【SDK Setup.exe】 出现在线安装包。 会出现“Failed to fetch URL https://dl-ssl.google…

【OS学习笔记】二 汇编语言和汇编软件

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 上一篇文章讲解了处理器&#xff0c;内存&#xff0c;和指令。学习了Intel 8086处理器的相关知识&#xff0c;如Intel通用寄存器的作用&#xff0c;程…

【软件开发底层知识修炼】一 深入浅出处理器之一 微处理器与微控制器

学习交流加&#xff08;可免费帮忙下载CSDN资源&#xff09;&#xff1a;个人微信&#xff1a; liu1126137994学习交流资源分享qq群1&#xff08;已满&#xff09;&#xff1a; 962535112学习交流资源分享qq群2&#xff1a; 780902027 深入浅出处理器这几篇文章可能你觉得对软件…

WINCE6 同时支持简繁体

最近两星期在玩WINCE6&#xff0c;因产品需要&#xff0c;应用软件需支持简繁体&#xff0c;显示其中一种很好办&#xff0c;只需要加入相应的字库。如加入简体字库&#xff1a;CEBASE->International->Locale Specific Support->Chinese(Simplified)&#xff0c;选择…

ASP.NET 2.0中将 GridView 导出到 Excel 文件中

下面代码实现将 GridView 导出到 Excel文件中。 值得注意的是VerifyRenderingInServerForm重载方法&#xff1a;MSDN上的 VerifyRenderingInServerForm 方法的描述&#xff1a;  必须位于 <form runatserver> 标记中的控件可以在呈现之前调用此方法&#xff0c;以便在控…

【软件开发底层知识修炼】二 深入浅出处理器之二 中断的概念与意义

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 上一篇文章我们学习了微处理器与微控制器的区别。点击链接查看上一篇文章的内容&#xff1a;微处理器与微控制器 本篇文章我们学习中断的概念与意义。…

SqlServer2008 安装经验日志总结

SqlServer2008 产品密钥&#xff08;仅供学习&#xff09;Developer: PTTFM-X467G-P7RH2-3Q6CG-4DMYBEnterprise: JD8Y6-HQG69-P9H84-XDTPG-34MBB------------------sqlserver2008安装经历步骤如下----------------------------- 1 安装前会对操作系统打补丁&#xff0c;安装完…

推荐学习-数据结构与算法之美

推荐一个学习资源&#xff1a;数据结构与算法之美。主要包括以下几个学习内容&#xff1a; 20个经典数据结构与算法100个真实项目场景案例文科生都能看懂的算法手绘图解轻松搞定BAT的面试通关秘籍 作者&#xff1a;王争 前谷歌工程师 内容很强。扫描我的二维码买的话&#x…