栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

剑指 Offer 05. 替换空格(C++实现)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

剑指 Offer 05. 替换空格(C++实现)

文章目录
  • 题目
  • 实现思路
  • 实现代码
  • 题目疑点解答

题目

剑指 Offer 05. 替换空格


实现思路
  1. 可以原地修改输入数组s的大小为输出数组的大小;即扩容;
  2. 同时用一个指针i指向修改后最后一个元素位置,一个指针j指向输入数组最后一个元素的位置;
  3. 当输入数组的位置不为空格时候就直接赋值:s[ i ] = s[ j ];
    当输入数组的位置为空格时候就替换空格;


注:此git来源于代码随想录它人;并不是作者制作的gif。


实现代码
 string replaceSpace(string s) {
	//统计空格个数:为的是开辟输出数组的大小
	int count = 0;
	int oldSize = s.size(); //输入数组的大小
	
	for(int i = 0;i < s.size();i++){
		if(s[i] == ' ') ++count;
	}
	//统计完后:开始原地开辟输出数组的大小
	// newSize = oldsize + count*2;
	s.resize(s.size() + count *2);
	int newSize = s.size(); //输出数组的大小
	
	//双指针分别指向输入数组和输出数组的最后一个元素位置
	//开始从后往前开始赋值和替换空格;
	//结束循环条件是:i <= j时候;
	for(int i = newSize - 1,j = oldSize - 1; i  > j;i--,j--){
		if(s[j] != ' '){
			s[i] = s[j];
		}else{
			s[i] = '0';
			s[i -1] = '2';
			s[i-2] = '%';
            i -=2;
		}
	}
	return s;	
}


题目疑点解答

为什么要从后向前填充,从前向后填充不行么?

从前向后填充每每次添加元素都要将添加元素之后的所有元素向后移动,这个是数组的特性,时间是复杂度过高。

而对于很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作;这样添加元素时候就不必把添加元素后面的元素都往后移;同时还在原地修改数组大小,不用开辟多一个新空间;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/296704.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号