当前位置:网站首页>leetcode每日一题:字符串压缩
leetcode每日一题:字符串压缩
2022-08-01 10:51:00 【利刃Cc】
面试题 01.06. 字符串压缩
难度简单142
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。
示例1:
输入:"aabcccccaaa"
输出:"a2b1c5a3"
示例2:
输入:"abbccd"
输出:"abbccd"
解释:"abbccd"压缩后为"a1b2c2d1",比原字符串长度更长。
提示:
- 字符串长度在[0, 50000]范围内。
思路一:
- 用 tmp 来存储新的字符串,用 count 记录重复出现的字符。
- 一开始对字符串 s 进行遍历,然后将每次第一次出现的字符赋给 tmp,然后判断一下字符串 s[i] == s[i + 1],若相等则让 count++ ,不相等则将 count 运用一个函数 to_string 转化为字符串然后尾插到 tmp,
- 然后继续循环,直到遍历结束。
class Solution {
public:
string compressString(string S) {
string tmp;
int count = 1;
for(int i = 0; i < S.size(); ++i)
{
//只将第一次出现的那个附上去,其他的pop掉
if(count == 1)
tmp += S[i];
//若前后两个相同则直接count++
if(S[i] == S[i+1])
{
count++;
}
//前后两个不同则将出现的次数尾插到tmp处
else
{
tmp += to_string(count);//使用to_string函数转化为sting类型
count = 1;
}
}
//将长度短的string返回
return tmp.size() < S.size() ? tmp : S;
}
};
思路二:
- 运用双指针,让 i 指向第一次出现的字符,然后 在内层循环让 j 去遍历找到和 i 处不同的字符
- 若找到了不同的则与思路1一样,将 i 处的字符尾插到 tmp,然后将长度 j - i 转化为字符串尾插到 tmp 后面
- 然后将 i 移到 j 处,继续循环,直到遍历结束。
class Solution {
public:
string compressString(string S) {
int i = 0, j = 0;
int n = S.size();
string tmp;
// 「外层循环」i 指向每个首次出现的字符
while (i < n)
{
// 「内层循环」j 向前遍历,直到字符串末尾或找到与 s[i] 不同的字符时跳出
while (j < n && S[i] == S[j])
j++;
// 压缩字符串,添加至 tmp
tmp += S[i];
tmp += to_string(j - i);
// 令 i 指向下一个首次出现的字符
i = j;
}
// 对比「压缩字符串」和「原字符串」长度,返回较短的
return tmp.size() < n ? tmp : S;
}
};
边栏推荐
- July 31, 2022 -- Take your first steps with C# -- Use arrays and foreach statements in C# to store and iterate through sequences of data
- 从零开始Blazor Server(4)--登录系统
- 深度学习 | MATLAB实现GRU门控循环单元gruLayer参数设定
- pve 删除虚拟机「建议收藏」
- 利用正则表达式的回溯实现绕过
- 一篇文章,带你详细了解华为认证体系证书(2)
- WPF 截图控件之绘制箭头(五)「仿微信」
- 一篇文章,带你详细了解华为认证体系证书(1)
- 复现assert和eval成功连接或失败连接蚁剑的原因
- How to find out hidden computer software (how to clean up the computer software hidden)
猜你喜欢

Py之yellowbrick:yellowbrick的简介、安装、使用方法之详细攻略

Visualization - Superset installation and deployment

复现assert和eval成功连接或失败连接蚁剑的原因

Google Earth Engine APP——15行代码搞定一个inspector高程监测APP

图解MySQL内连接、外连接、左连接、右连接、全连接......太多了

CTO strongly banning the use of the Calendar, that in what?

Promise learning (2) An article takes you to quickly understand the common APIs in Promise

进制与转换、关键字

什么是步进电机?40张图带你了解!

Promise学习(四)异步编程的终极解决方案async + await:用同步的方式去写异步代码
随机推荐
周鸿祎称微软抄袭 360 安全模式后发文否认;英特尔CEO基辛格回应市值被AMD超越:股价下跌是咎由自取|极客头条
深度学习 | MATLAB实现一维卷积神经网络convolution1dLayer参数设定
CTFshow,命令执行:web31
July 31, 2022 -- Take your first steps with C# -- Use arrays and foreach statements in C# to store and iterate through sequences of data
广域铭岛入选2022年重庆市数字经济产业发展试点示范项目名单
The meaning and trigger conditions of gc
进制与转换、关键字
Visualization - Superset installation and deployment
数仓分层简介(实时数仓架构)
Solve vscode input! Unable to quickly generate skeletons (three methods for the new version of vscode to quickly generate skeletons)
已解决(pip安装库报错)Consider using the-- user option or check the permissions.
2022年7月31日--使用C#迈出第一步--使用 C# 创建具有约定、空格和注释的易读代码
Promise学习(一)Promise是什么?怎么用?回调地狱怎么解决?
一篇文章,带你详细了解华为认证体系证书(2)
Why Metropolis–Hastings Works
activiti工作流的分页查询避坑
RK3399 platform development series on introduction to (kernel) 1.52, printk function analysis - the function call will be closed
2022年中盘点 | 产品打底,科技背书,广汽集团阔步向前
PDMan-国产免费通用数据库建模工具(极简,漂亮)
SAP ABAP OData 服务如何支持 $orderby (排序)操作试读版