当前位置:网站首页>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;
}
};
边栏推荐
- AI篮球裁判火了,走步算得特别准,就问哈登慌不慌
- 使用KeyStore生成证书
- How to find out hidden computer software (how to clean up the computer software hidden)
- LeakCanary如何监听Service、Root View销毁时机?
- 周鸿祎称微软抄袭 360 安全模式后发文否认;英特尔CEO基辛格回应市值被AMD超越:股价下跌是咎由自取|极客头条
- Promise学习(三)Promise的几个关键性问题 -- 状态改变、执行顺序与机制、多任务串联、异常穿透、中断promise链
- Browser shortcut keys
- MFC实现交通图导航系统
- Why Metropolis–Hastings Works
- 浏览器快捷键大全
猜你喜欢

如何解决 chrome 浏览器标签过多无法查看到标题的情况

Golang内存分析工具gctrace和pprof实战

Promise学习(一)Promise是什么?怎么用?回调地狱怎么解决?

Why Metropolis–Hastings Works

SAP ABAP OData 服务如何支持 $orderby (排序)操作试读版

Promise学习(四)异步编程的终极解决方案async + await:用同步的方式去写异步代码

Android 安全与防护策略

Solve vscode input! Unable to quickly generate skeletons (three methods for the new version of vscode to quickly generate skeletons)

WTM:ASP.NET Core快速开发利器!

STM32 Personal Notes - Watchdog
随机推荐
Visualization - Superset installation and deployment
进制与转换、关键字
retired paddling
RK3399 platform development series on introduction to (kernel) 1.52, printk function analysis - the function call will be closed
pgAdmin 4 v6.12 发布,PostgreSQL 开源图形化管理工具
Push the local project to the remote repository
在线GC日志分析工具——GCeasy
Promise学习(二)一篇文章带你快速了解Promise中的常用API
C#/VB.NET 将PPT或PPTX转换为图像
Mini Program Graduation Works WeChat Food Recipes Mini Program Graduation Design Finished Products (2) Mini Program Functions
PowerPC技术与市场杂谈
7. SAP ABAP OData 服务如何支持 $orderby (排序)操作
PDMan-国产免费通用数据库建模工具(极简,漂亮)
机器学习 | MATLAB实现支持向量机回归RegressionSVM参数设定
LeakCanary如何监听Service、Root View销毁时机?
正则表达式
WPF 截图控件之绘制箭头(五)「仿微信」
昇思大模型体验平台初体验——以小模型LeNet为例
Solve vscode input! Unable to quickly generate skeletons (three methods for the new version of vscode to quickly generate skeletons)
Introduction to STM32 development Introduce IIC bus, read and write AT24C02 (EEPROM) (using analog timing)