剑指offer笔记(六)字符串空格替换
字符串空格替换
题目:实现一个函数,把字符串中的每一个空格替换为“%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笔记(六)字符串空格替换相关推荐
- 剑指offer系列-----item3字符串空格替换
题干: 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 分析: 这题 ...
- 剑指offer面试题[4]-空格替换
题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 以输入hell ...
- 剑指offer——面试题4:替换空格
#剑指offer--面试题4:替换空格 此题的关键思路在于字符串的从后向前复制!!! class Solution { public:void replaceSpace(char *str,int l ...
- 剑指offer笔记(七) 第47题至第53题
剑指offer笔记(七) 第47题至第53题 前言 一.JZ47 礼物的最大价值 二.JZ48 最长不含重复字符的子字符串 三.JZ49 丑数 四.JZ50 第一个只出现一次的字符 五.JZ51 数组 ...
- 剑指 Offer II 014. 字符串中的变位词
剑指 Offer II 014. 字符串中的变位词 题目 示例 解答 题目来源为leetcode 题目 给定两个字符串s1和s2,写一个函数来判断s2是否包含s1的某个变位词. 换句话说,第一个字符串 ...
- 【LeetCode】剑指 Offer 67. 把字符串转换成整数
[LeetCode]剑指 Offer 67. 把字符串转换成整数 文章目录 [LeetCode]剑指 Offer 67. 把字符串转换成整数 package offer;public class So ...
- [[EVD]] - 剑指 Offer 67. 把字符串转换成整数
题目分析:[[EVD]] - 剑指 Offer 67. 把字符串转换成整数https://leetcode-cn.com/problems/ba-zi-fu-chuan-zhuan-huan-chen ...
- 在要求输入数字处找到非数字字符_剑指 Offer 67. 把字符串转换成整数 leetcode 剑指offer系列...
点击专辑上方"蓝字"关注我吧 题目难度: 中等 原题链接[1] 今天继续更新剑指 offer 系列, 老样子晚上 6 点 45 分准时更新公众号 每日精选算法题, 大家记得关注哦~ ...
- 【Java】 剑指offer(67) 把字符串转换成整数
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 请你写一个函数StrToInt,实现把字符串转换成整数这个功能 ...
最新文章
- 加深Java基础,做了20道题选择题!简答题没做
- python xlrd处理表格常用方法
- Castle.ActiveRecord的ProxyFactory配置
- oracle中year类型吗,为什么表名this_year_end+next_year在Oracle数据库中无效?()
- js中var、let、const区别
- Spring :事务使用的注意事项
- 高德地图联手中国气象局,积水地图 AI 版实时预测道路积水
- java的线程池的基础类
- 翻译:机器学习 数据科学家 top 10 十大算法
- Mac版Java反编译工具jd-gui解压即用
- linux shell 字体颜色样板,BASH shell下设置字体及背景颜色
- 百度干净云(无广告不限速的绿色百度云客户端)
- 汽车金融信用评分卡模型-论文_毕业设计_企业项目复现
- Visual Studio程序员主题库
- WIndow10下安装UR机器人接口ur_rtde
- Python实现一个简单的目标检测
- firebase 推送_使用Firebase Cloud Messaging发送推送通知
- 十行 js 获取带有双字节字符的字符串长度
- DNS服务器IP地址大全
- Spring Boot整合ActiveMQ及场景举例(点对点模式、订阅模式)
热门文章
- 微型计算机d3000,微机(二次)消谐(多功能)
- cosmos源码分析之一概述
- picsart下载_PicsArt美易绘画
- 一种基于分段线性插值的Gamma校正硬件实现
- 穿上资本小棉袄的00后社交,到底是什么鬼?
- 谷歌退出将会给中国互联网带来的10个变化 1
- iis提示“另一个程序正在使用此文件,进程无法访问。(异常来自HRESULT:0x80070020) ”
- 广州佰新网络:简约美式平面设计有哪些元素?
- 打开autoCAD2004出现fail to get commcntrcontroller错误信息
- spark与python关系_spark: RDD与DataFrame之间的相互转换方法