字符串空格替换

题目:实现一个函数,把字符串中的每一个空格替换为“%20”,eg:we are happy  替换为 we%20are%20happy

由原来一个空格字符,替换之后变成%,2,0三个字符,因此替换之后的字符串会变长

此时需要考虑是否在原字符串基础上进行修改

  • 如果不考虑内存空间是否充足,可以直接考虑再开辟一块空间进行新字符串存放,基于C++STL模板类直接进行遍历,遇到空格替换添加至新串即可,代码如下:
class Replacement {
public:string replaceSpace(string iniString, int length) {// write code herestring newStr;for (int i = 0; i < length; i++){if (iniString[i] == ' '){newStr.push_back('%');newStr.push_back('2');newStr.push_back('0');}else{newStr.push_back(iniString[i]);}}return newStr;}
};
  •  如果考虑在原字符串基础上进行修改,需要先对原字符串进行扩容,扩容之后,如果从头到尾进行遍历。每一次替换都会导致后续字符被覆盖,对此需要不断向后移动替换位置之后的字符
  • 如果选择逐个从后往前遍历依次赋值,时间复杂度将会从O(n^2)缩减到O(n)

  • 代码如下:
class Replacement {
public:string replaceSpace(string iniString, int length) {if(length<=0)return iniString;int blank = 0;for(int i=0;i<length;++i)if(iniString[i]==' ')++blank;int newLength = length+(blank*2);iniString.resize(newLength);int index1 = length-1;//指向原字符串结尾int index2 = newLength-1;//指向新字符串结尾while(index1>=0 && index2>index1){if(iniString[index1]==' '){iniString[index2--]='0';iniString[index2--]='2';iniString[index2--]='%';}elseiniString[index2--]=iniString[index1];--index1;}return iniString;}
};
  • 如果考虑在原字符串基础上进行修改,除了扩容使用resize之外,可以通过STL特性进行编写,代码更加简洁高效,代码如下:
class Replacement {
public:string replaceSpace(string iniString, int length) {if(length<=0)return iniString;//STL模板string特性for(int i=0;i<length;i++){if(iniString[index1]==' '){iniString.erase(i,1);iniString.insert(i,"%20");}}return iniString;}
};

剑指offer笔记(六)字符串空格替换相关推荐

  1. 剑指offer系列-----item3字符串空格替换

    题干: 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 分析: 这题 ...

  2. 剑指offer面试题[4]-空格替换

    题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 以输入hell ...

  3. 剑指offer——面试题4:替换空格

    #剑指offer--面试题4:替换空格 此题的关键思路在于字符串的从后向前复制!!! class Solution { public:void replaceSpace(char *str,int l ...

  4. 剑指offer笔记(七) 第47题至第53题

    剑指offer笔记(七) 第47题至第53题 前言 一.JZ47 礼物的最大价值 二.JZ48 最长不含重复字符的子字符串 三.JZ49 丑数 四.JZ50 第一个只出现一次的字符 五.JZ51 数组 ...

  5. 剑指 Offer II 014. 字符串中的变位词

    剑指 Offer II 014. 字符串中的变位词 题目 示例 解答 题目来源为leetcode 题目 给定两个字符串s1和s2,写一个函数来判断s2是否包含s1的某个变位词. 换句话说,第一个字符串 ...

  6. 【LeetCode】剑指 Offer 67. 把字符串转换成整数

    [LeetCode]剑指 Offer 67. 把字符串转换成整数 文章目录 [LeetCode]剑指 Offer 67. 把字符串转换成整数 package offer;public class So ...

  7. [[EVD]] - 剑指 Offer 67. 把字符串转换成整数

    题目分析:[[EVD]] - 剑指 Offer 67. 把字符串转换成整数https://leetcode-cn.com/problems/ba-zi-fu-chuan-zhuan-huan-chen ...

  8. 在要求输入数字处找到非数字字符_剑指 Offer 67. 把字符串转换成整数 leetcode 剑指offer系列...

    点击专辑上方"蓝字"关注我吧 题目难度: 中等 原题链接[1] 今天继续更新剑指 offer 系列, 老样子晚上 6 点 45 分准时更新公众号 每日精选算法题, 大家记得关注哦~ ...

  9. 【Java】 剑指offer(67) 把字符串转换成整数

      本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请你写一个函数StrToInt,实现把字符串转换成整数这个功能 ...

最新文章

  1. 加深Java基础,做了20道题选择题!简答题没做
  2. python xlrd处理表格常用方法
  3. Castle.ActiveRecord的ProxyFactory配置
  4. oracle中year类型吗,为什么表名this_year_end+next_year在Oracle数据库中无效?()
  5. js中var、let、const区别
  6. Spring :事务使用的注意事项
  7. 高德地图联手中国气象局,积水地图 AI 版实时预测道路积水
  8. java的线程池的基础类
  9. 翻译:机器学习 数据科学家 top 10 十大算法
  10. Mac版Java反编译工具jd-gui解压即用
  11. linux shell 字体颜色样板,BASH shell下设置字体及背景颜色
  12. 百度干净云(无广告不限速的绿色百度云客户端)
  13. 汽车金融信用评分卡模型-论文_毕业设计_企业项目复现
  14. Visual Studio程序员主题库
  15. WIndow10下安装UR机器人接口ur_rtde
  16. Python实现一个简单的目标检测
  17. firebase 推送_使用Firebase Cloud Messaging发送推送通知
  18. 十行 js 获取带有双字节字符的字符串长度
  19. DNS服务器IP地址大全
  20. Spring Boot整合ActiveMQ及场景举例(点对点模式、订阅模式)

热门文章

  1. 微型计算机d3000,微机(二次)消谐(多功能)
  2. cosmos源码分析之一概述
  3. picsart下载_PicsArt美易绘画
  4. 一种基于分段线性插值的Gamma校正硬件实现
  5. 穿上资本小棉袄的00后社交,到底是什么鬼?
  6. 谷歌退出将会给中国互联网带来的10个变化 1
  7. iis提示“另一个程序正在使用此文件,进程无法访问。(异常来自HRESULT:0x80070020) ”
  8. 广州佰新网络:简约美式平面设计有哪些元素?
  9. 打开autoCAD2004出现fail to get commcntrcontroller错误信息
  10. spark与python关系_spark: RDD与DataFrame之间的相互转换方法