替换空格

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

示例 1:

输入:s = “We are happy.”
输出:“We%20are%20happy.”

限制:

0 <= s 的长度 <= 10000

解题思路

看到题目我们先想到最暴力的解法就是通过遍历整个字符串来找到每一个空格,然后将每一个空格替换成%20。但是由于题目限定了字符串的大小,所以考虑到算法的时间复杂度,这种方法效果太差。
然后想到了利用C++中stl现有的查找和替换算法来进行实现。find函数和replace函数定义如下图所示。

我们先通过find函数从字符串开始位置往后找到第一个空格处,然后进入循环进行替换,利用replace函数完成替换。当找到字符串末尾时,退出循环,返回替换后的字符串。

代码展示

代码如下(示例):

class Solution {
public:string replaceSpace(string s) {//从字符串起始位置找到第一个空格处,返回起位置给possize_t pos=s.find(" ",0);//循环条件是不超过整个字符串长度while(pos<s.size()){//利用replace函数替换空格s.replace(pos,1,"%20");//让pos指向下一个空格处pos=s.find(" ",pos);}//返回替换过后的字符串return s;}
};

运行结果

可以看到算法虽然通过了,但是效果并不是太好。

*执行用时:4 ms, 在所有 C++ 提交中击败了35.36%的用户**内存消耗:6.4 MB, 在所有 C++ 提交中击败了28.94%的用户*

优化解法:双指针法
先通过遍历统计出字符串中空格的总数,然后将字符串总长度追加上空格总数的两倍(“ ”变为“%20”增加了空格数两倍的长度)。再让j指向原字符串长度,i指向新字符串长度。当j指向的字符不是空格时,则将j指向的字符赋值给i指向字符。当j指向的字符是空格时,则将i指向的字符改为0,i-1指向的换为2,i-2指向的换为%,然后将i移到i-2处。然后一直循环,直到j<i不成立时退出循环并返回替换后的字符串。

代码展示

代码如下(示例):

class 

运行结果

可以看到算法通过了,而且效果比较理想。

*执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户**内存消耗:6.5 MB, 在所有 C++ 提交中击败了8.78%的用户*

matlab 查找字符串中第一个不为空格的_替换空格(剑指offer第三题)相关推荐

  1. LeetCode 03: T58. 最后一个单词的长度(简单); 剑指 Offer 05. 替换空格(简单); 剑指 Offer 58 - II. 左旋转字符串(简单)

    文章目录 T7: 58. 最后一个单词的长度(简单) 思路 解法: 双指针 T8: 剑指 Offer 05. 替换空格(简单) 思路 解法: replace T9: 剑指 Offer 58 - II. ...

  2. 查找字符串中第一个只出现一次的字符

    Java Map接口提供了将Key映射到值的对象,HashMap  TreeMap 方法 功能 put(K key ,V value) 向集合中添加指定key ,value的映射关系 contains ...

  3. 剑指Offer+第37题+两个链表的第一个公共节点+java

    题目:输入两个链表,找出它们的第一个公共结点. 面试的时候碰到这道题,很多应聘者的第一反应就是蛮力法:在第一链表上顺序遍历每个结点,没遍历到一个结点的时候,在第二个链表上顺序遍历每个结点.如果在第二个 ...

  4. 剑指 offer第12题-矩阵中的路径

    判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向上下左右移动一个格子.如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子. ...

  5. python加减法计算题 代码_关于《剑指offer》中不用加减乘除做加法的Python代码的问题...

    题目如下: 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 题目不难,可以采用位操作来实现,利用异或运算来计算不带进位的加法结果,利用与运算计算进位的标志,然后将这两个 ...

  6. vue中向数组去重_「前端剑指offer第3期」来,手写一下数组去重

    数组去重一般来说就这么几种方法,理解代码,记住就好!Map.Set.reduce.filter~ 方法1 .Map 创建一个Map对象,把数组的值作为Map对象的索引,再获取所有的索引. const ...

  7. 剑指offer第62题 圆圈中最后剩下的数字(约瑟夫问题)

    文章目录 问题描述: 解题思路: 代码实现: 问题描述: 0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字.求出这个圆圈里剩下的最后一个数字. 例如,0.1.2.3. ...

  8. Leetcode刷题笔记——剑指offer II (一)【整数、数组、字符串、链表】

    目录 整数 剑指 Offer II 001. 整数除法 剑指 Offer II 002. 二进制加法 剑指 Offer II 003. 前 n 个数字二进制中 1 的个数 剑指 Offer II 00 ...

  9. leetcode练习--字符串中第一个唯一字符

    查找字符串中第一个唯一的字符,返回其index: 这里我用了hash的方法,没遇到一个新的字符就会将其保存至map中,我以为map里面会按照insert的顺序进行排放,结果map保存成功后输出结果如下 ...

最新文章

  1. 目前最全面深入的Linux设备驱动程序著作
  2. 第十四章:springboot 定时任务
  3. php new redis错误,解决PHP Redis扩展无法加载的问题(zend_new_interned_string in Unknown on line 0)...
  4. Python 动态生成多维数组
  5. 网管日志-06.07.21
  6. 华为机考回忆版(三:自己的)
  7. IT运维服务管理问题总结 #F#
  8. C++之类模板最简单的使用
  9. C语言指针操作字符数组demo
  10. CPU VS GPU笔记
  11. 一张图轻松搞懂javascript event对象的clientX,offsetX,screenX,pageX区别
  12. 【Elasticsearch】es shard split 使用分析
  13. SQL Server中的快照隔离
  14. 激活Maven profile的几种方式
  15. 【VC++类型转换】CString和System::String类型的转换
  16. RazorPage语法介绍(二)
  17. 每天1万步就叫健康吗?
  18. 多元线性回归实现代码
  19. MySQL存储过程、函数、视图、触发器、索引和锁的基本知识
  20. 英语文献阅读过程中的词汇积累

热门文章

  1. PHP -- Traits新特性
  2. 我的100篇随笔纪念,关于JScript开发
  3. ubuntu shell脚本出错 dash
  4. Unity+NGUI多分辨率适配方案
  5. log4net根据日志类型写入到不同的文件中
  6. 手游项目初期的一些想法
  7. which与whereis区别
  8. sql读取 获取子节点 父节点
  9. 软件测试——网络协议知识(二)
  10. java jar 版本号,比较两个jar包的版本号