1.【刷爆LeetCode】替换空格(多方法、多思路解决)

article/2025/9/10 8:33:48

        大家好我是Liyuyue!

        接下来我会讲我刷的LeetCode好题用到的好思路、好方法分享给大家一起学习,如果大家在看的过程中还有好的方法,可以评论区或者直接找我继续讨论,感谢大家的支持~!


我们先来看要求:

简要分析:

         也就是说当我们遇见 '空格' 的时候要将这个空格替换成 "%20" ,如果不是空格就正常拷贝,而且需要对s开辟多出来的空间。

        大体的思路分析完了,接下来我会讲三种方法解决这个问题,两个是用纯C语言去写,一种用C++去写。

方法一:

分析:

        先数出有多少个空格,因为每一个空格会替换成 "%20" 这三个字符,所以当我们数出有几个空格,也就知道了替换完后总共有多少个有效字符,还要注意要多开辟出来一个空间用来存放 '\0' 。分析完毕,接下来我画图给大家展示过程:

        当我们面对非空格时正常拷贝:

 

         当面对空格的时候我们要在start1连续添加 "%20",然后start1++、start2++。

 

         后面的操作也是如此。

         到这里后要将上面的 '\0' 一起拷贝下来,否则就会出现堆溢出的情况!这个比较特殊,要注意它们的下标。当拷贝完 len 这个下标后再结束。

        然后我们看下C语言给的模板:

        接下来我们将思路转换为代码(里面写的很清楚,大家仔细观看)。

char* replaceSpace(char* s) {//有多少空格int spacecnt = 0;// 空格数char* ptr = s;int len = 0;// s 的长度while (*ptr)// 遍历一遍看有多少个{if (*ptr == ' ')spacecnt++;ptr++;len++;}int newlen = len + 2 * spacecnt;// 要开辟的空间有多少个有效字符char* tmp = (char*)malloc(sizeof(char) * newlen + 1);// 要多开辟出来一个留给'\0'int start1 = 0;int start2 = 0;while (start2 <= len)// 当start2 打印完len处的'\0'才停止{if (s[start2] != ' ')// 如果不为空格正常打印{tmp[start1++] = s[start2++];}else// 如果为空格就打印三个字符,两者都++{tmp[start1++] = '%';tmp[start1++] = '2';tmp[start1++] = '0';start2++;}}return tmp;// 返回新开辟空间的首地址
}

方法二:

        因为上一个方法是开辟空间后,将题目给的数组依次拷贝到开辟的空间中,遇到空格就打印 "%20",这里的方法是在一个空间内实现将空格转换为 '%20' ,上一个方法的空间复杂度是O(n),虽然这个方法的空间复杂度也是O(n),但是如果给的空间足够大的话,可以完成空间复杂度为O(1),所以这个方法也是很有必要的!

分析:

        这里也需要找出开始 s 的有效字符的个数和开辟空间 tmp 有效字符的个数,但是这里要从最后开始往前进行遍历,因为是从后往前遍历,所以当遇到空格的时候要转换为 "02%" ,然后遍历停止的条件也会发生变化。

        先将 s 拷贝到新开辟的一个空间中(开辟空间的方法跟方法一是相同的)。

        然后开始从开辟好的空间的最后一个位置end1 拷贝到原来s 的 '\0' end2处。

        当遇到空格的时候,end1 一直往前走三个符号位分别输入 "02%" 。

        最后停止的条件是end2 和end1 相遇的时候(因为相遇就代表相遇的位置之前没有空格了)

        接下来我们将思路转换为代码(里面写的很清楚,大家仔细观看)。

char* replaceSpace(char* s) {// 有多少空格int spacecnt = 0;// 空格个数char* ptr = s;int len = 0;// 有效字符个数while (*ptr)// 遍历一遍看有多少个{if (*ptr == ' ')spacecnt++;ptr++;len++;}int newlen = len + 2 * spacecnt;char* tmp = (char*)malloc(sizeof(char) * newlen + 1);// 多开辟一个'\0' 空间tmp[newlen] = '\0'; // 我这里直接手动给的'\0'strcpy(tmp, s);// 拷贝下来(模拟空间复杂度为O(1))int end1 = len - 1;int end2 = newlen - 1;while (end1 != end2)// 让end1 == end2 的时候停下来{if (tmp[end1] != ' ')// 不是空格正常遍历{tmp[end2--] = tmp[end1--];}else// 是空格给三个字符{tmp[end2--] = '0';tmp[end2--] = '2';tmp[end2--] = '%';end1--;}}return tmp;// 返回开辟的空间首地址
}

方法三:

        我们先看下C++给的模板是什么样的。

 

        这里是C++用库函数的方法,思路和方法一的方法一摸一样,大家直接看看代码,我继续给大家标记一下。

class Solution {
public:string replaceSpace(string s) {string str;// 创建一个对象for(auto ch : s)// 利用迭代器依次遍历s{if(ch != ' ')// 如果不是空格就拷贝str += ch;else// 是空格就拷贝"%20"str += "%20";}return str;// 返回}
};

        这样就完成了,是不是非常简单。但是这里的效率不是很高,因为在 += 的时候会有增容的消耗,我们可以提前开好空间:

class Solution {
public:string replaceSpace(string s) {int spacecnt = 0;for(auto ch : s){if(ch == ' ')++spacecnt;}string str;// 提前开好空间,避免 += 增容的消耗,str.reserve(s.size() + spacecnt * 2);for(auto ch : s){if(ch != ' ')str += ch;elsestr += "%20";}return str;}
};

         如上就是 替换空格 的解析,接下来本专辑会持续更新【刷爆LeetCode】,和大家一起爆扣LeetCode!!!,如果大家喜欢看此文章并且有收获,可以时刻关注我,本专栏持续更新!

        感谢大家观看,感谢大家支持!


http://chatgpt.dhexx.cn/article/p05MQTeo.shtml

相关文章

学习笔记 - excel筛选分组

整理excel的时候&#xff0c;遇到一个分组功能筛选功能&#xff0c;原始excel内容如下&#xff1a; excel右上角有个筛选功能框 点击下拉列中的“筛选”&#xff0c;excel界面如下显示&#xff0c;标识可以进行筛选功能了&#xff0c;所有列都加入了筛选项目。 点击City Name下…

excel 分组计数

采用数据透视表的方法对数据进行分组技数 1.现在需要对 下表中各类型出现的次数进行统计。 2.选中区域点击数据透视表 3.首先&#xff0c;把类型拖到“值”和“行”中&#xff0c;需要注意的是在值中要选择“计数项&#xff01;&#xff01;&#xff01;&#xff01;&#xff…

excel自动分组

1.将年龄分组&#xff08;设置步长&#xff09; 2.日期按照季度分组

excel 手动分组和自动分组

1某个类别下有多个条目&#xff0c;我们想打开折叠显示 方法一&#xff1a;一个个的设置分组 2方法二&#xff1a; 自动分级显示 上面的实现方式&#xff0c;还是直接使用excel的分组功能&#xff0c;只不过在处理过程中&#xff0c;会遇到组成员一个时&#xff0c;处理就会麻…

Excel分组行转列

表格一 表格二 Excel表格一分组行转列变为表格二所示的格式怎么弄&#xff1f; 方案一&#xff1a; 转置粘贴&#xff0c; 每组数据单独处理&#xff0c;一组一组的选择&#xff0c;然后右键“粘贴选项”->“转置”&#xff0c;这样这一组数据就列传行了。 重复所有分组&…

excel将数据按某一列值分组并绘制分组折线图

目录 一、实现按id分组 二、绘制分组折线图 今天在处理数据的时候发现了一个很巧妙的EXCEL绘制分组折现图的方法&#xff0c;简单记录分享一下。我的数据大概长这样,我希望实现的目标是根据产品id分组绘制不同产品的销量图。 一、实现按id分组 复制产品id那一列&#xff0c;点击…

如何用excel对数据按月分组

建立数据透视表 选中一个单元格-插入-数据透视表 选择要分析的数据及结果显示位置 我主要是分析收益波动&#xff0c;需要的数据是日期和收益率&#xff0c;因此勾选date和return 数据会自动按年和季度分类 结果如图&#xff1a; 进一步将数据按月分类&#xff0c;可以在结果…

【excel】分组连续排名和不连续排名公式

需求场景&#xff1a;对上面的数据进行排名计算&#xff0c;4种情况&#xff1a; ①不考虑commDate&#xff0c;单独对FoldPageNum进行排名&#xff0c;不连续排名&#xff1b; ②不考虑commDate&#xff0c;单独对FoldPageNum进行排名&#xff0c;连续排名&#xff1b; ③按co…

Excel分组数据、并创建多个新Excel文件

需求描述 原文件test.xlsx"为.xlsx格式&#xff0c;需要对不同行业的数据 进行切分&#xff0c;并存储在不同Excel表中。 步骤 1. 读取Excel转化为DataFrame import pandas as pd df pd.read_excel("test"".xlsx") df.head(10) #查看前十条数据…

Python 绘画excel分组柱状图(懒人学习)

1.excel案例如截图&#xff1a; 很简单大家自己照着做一个就可以了。 2.完整代码如下&#xff1a; import pandas as pd import matplotlib.pyplot as plt students pd.read_excel(‘H:/Python自动化办公–Pandas玩转Excel源代码&#xff08;7-30&#xff09;/010/Studen…

使用EXCEL进行数据分组分析法

分组分析是将总体数据按照某一特征性质划分成不同的部分和类型进行研究&#xff0c;从而深入分析其内在规律。 一、为什么要分组&#xff1f; 对于大量的数据&#xff0c;如果不进行分组是很难发现其中规律&#xff0c;找到不同组别之间的关系&#xff0c;从而更好地对比&…

如何在Excel中分组排名?两个公式轻松搞定!

点赞再看&#xff0c;养成习惯&#xff1b;桃李不言&#xff0c;下自成蹊。 微信搜索【亦心Excel】关注这个不一样的自媒体人。 本文 GitHub https://github.com/hugogoos/Excel 已收录&#xff0c;包含Excel系统学习指南系列文章&#xff0c;以及各种Excel资料。 教导主任给了…

excel分组求最小值

求一列的最大值最小值简单&#xff0c;但是有时候需要找出一列数据中每个分组的最大最小值&#xff0c;尤其是数据量较大的时候&#xff0c;难以手动去标出&#xff0c;这时最好用函数解决。 解决办法&#xff1a; 统计函数&#xff0c;在C列中输入公式&#xff0c; IF(B2MIN(…

excel实现分组计数

实现效果—如图&#xff1a;统计各区间成绩数量 更详细讲解&#xff1a;点击查看原文 操作步骤如图&#xff1a; 核心要点&#xff1a; 将【成绩】分别拖入【行】和【值】&#xff0c;并将【值-值字段属性&#xff1a;设为计数&#xff08;图二&#xff09;】

excel----分组后统计

复制一列后数据删除重复值后分组 countif分组统计一列中项出现的次数 sumif分组统计组内和 找出一列中不重复的项 d2中写入下面的公式&#xff0c;然后下拉得到三项&#xff01; INDEX(A:A,MIN(IF(COUNTIF($D$1:D1,$A$2:$A$11),65536,ROW($A$2:$A$11))))&""

Excel 数据随机分组

文章目录 1. 任务描述2. 实现方法一&#xff1a;Excel 函数3. 实现方法二&#xff1a;方方格子 Excel 插件 1. 任务描述 给定一定数量的数据&#xff0c;要求随机分成 n 组。例如&#xff0c;老师将学生随机分组进行讨论&#xff0c;部门将员工随机分组参加活动等。下面使用 Ex…

利用计算机进行频数分布表制作,excel制作交叉分组表,excel分组频数分布表

我们在编辑Excel表格的时候&#xff0c;如果数据很多则有可能造成数据的重复输入&#xff0c;这样不仅影响数据的准确性&#xff0c;而且还会浪费我们的时间&#xff0c;不过想要在海量的数据表中找到那些重复值也并非易事&#xff0c;下面小编以Excel 2013为例&#xff0c;教大…

Excel如何分组排序

之前有同学发了一个这个问题&#xff0c;如下图所示&#xff0c;左边是原始数据表&#xff0c;标有底色的B/G/H列是要按照右表中的要求进行公式计算的。 如要求所示&#xff0c;B列排名是按照某片区下某等级之间的5月业绩环比分组排名&#xff0c;G列“是否各片区等级前两名”要…

计算机分组Excel,【Excel神技能】如何在Excel表格中进行“数据分组”?

有时候一页Excel表格中有太多的数据&#xff0c;难道要老板一直拖着鼠标往下翻动吗&#xff1f;估计老板会跟你说“再见&#xff01;”... 那如何快速将这些数据分组好&#xff0c;让老板看着舒心呢&#xff1f;Sara今天就和小伙伴们分享下如何在Excel表格中快速分组吧~ 第一步…

excel 分组统计

目录 1.把数据复制到 excel 2.选择插入数据透视表 3.拖拽生成分组统计值 4.让透视表 以表格形式展示 5.排序计数列 6.完成效果 1.把数据复制到 excel 2.选择插入数据透视表 3.拖拽生成分组统计值 4.让透视表 以表格形式展示 5.排序计数列 6.完成效果