【剑指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,一经查实,立即删除!

相关文章

数据仓设计

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国家电网&#…

【剑指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;后续更新

【剑指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 深入浅出处理器这几篇文章可能你觉得对软件…

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

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

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

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

【软件开发底层知识修炼】三 深入浅出处理器之三 内存管理与内存管理单元(MMU)

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 上一篇文章学习了中断的概念与意义&#xff0c;以及中断的应用-断点调试原理。点击链接复习上一篇文章&#xff1a;中断的概念与意义 本片文章继续学…

hbase思维导图

持续更新中 hbase思维导图 感谢分享1. hbase 概述2. hbase 数据模型3. hbase 架构4. hbase 的读写流程5. hbase 优化1. hbase 概述 2. hbase 数据模型 3. hbase 架构 4. hbase 的读写流程 5. hbase 优化

安卓从入门到进阶推荐学习方法与书籍整理(pdf)

前言&#xff1a;技术书阅读方法论 一.速读一遍&#xff08;最好在1~2天内完成&#xff09; 人的大脑记忆力有限&#xff0c;在一天内快速看完一本书会在大脑里留下深刻印象&#xff0c;对于之后复习以及总结都会有特别好的作用。 对于每一章的知识&#xff0c;先阅读标题&…

SharePoint中的权限体系

1.MOSS中的权限结构 MOSS中的权限结构主要有三部分&#xff1a;网站权限&#xff0c;列表权限&#xff0c;个人权限。 网站权限由18种如下图&#xff1a; 列表权限由12种&#xff0c;如下图&#xff1a; 个人权限由三种&#xff0c;如下图&#xff1a; 2.权限级别 上面提供…

MobaXterm_Personal_20.1最简单方式链接阿里云服务器

MobaXterm_Personal_20.1链接购买的阿里云服务器1.登录到阿里云首页2.阿里云首页3. 找到 服务器实例4. 重置密码5. 配置 MobaXterm_Personal_20.15.1 MobaXterm_Personal_20.1介绍6. 输入重置的密码1.登录到阿里云首页 2.阿里云首页 3. 找到 服务器实例 4. 重置密码 5. 配置 Mo…

机器学习和python学习之路精心整理技术书从入门到进阶

“机器学习&#xff0f;深度学习并不需要很多数学基础&#xff01;”也许你在不同的地方听过不少类似这样的说法。对于鼓励数学基础不好的同学入坑机器学习来说&#xff0c;这句话是挺不错的。不过&#xff0c;机器学习理论是与统计学、概率论、计算机科学、算法等方面交叉的领…

FusionChart完全入门手册8

动画样式类型 FusionCharts做得最好的事情之一就是图表动画序列&#xff0c;这是用户静静乐道的。默认情况下&#xff0c;FusionCharts仅在数据绘制&#xff08;柱状图、饼图、折线图等&#xff09;时候使用动画。但是FusionCharts V3不限制你的想象力。 使用动画样式,你可以…