⭐加入组队刷题,每日一题,每天进步⭐
最后补一个字符可以省去一点边界处理
——leetcode此题热评
前言
哈喽,大家好,我是一条。
糊涂算法,难得糊涂
点击跳转到《糊涂算法》专栏学习java大厂面试必备数据结构和算法知识!
Question
面试题 01.06. 字符串压缩
难度:简单
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。
示例1:
输入:"aabcccccaaa" 输出:"a2b1c5a3"
示例2:
输入:"abbccd" 输出:"abbccd" 解释:"abbccd"压缩后为"a1b2c2d1",比原字符串长度更长。
提示:
字符串长度在[0, 50000]范围内。
Solution
标准解法:双指针。
简单解法:普通遍历。
- 维护一个计数器
- 巧用
StringBuilder.append()
Code
所有
leetcode
代码已同步至github欢迎
star
/**
* @author 一条coding
*/
class Solution {
public String compressString(String S) {
if (S.equals("")){
return S;
}
char[] chars = S.toCharArray();
StringBuilder builder = new StringBuilder().append(chars[0]);
Integer sum=1;
for (int i = 1; i <chars.length ; i++) {
if (chars[i]==chars[i-1]){
sum+=1;
}else {
builder.append(sum);
builder.append(chars[i]);
sum=1;
}
}
builder.append(sum);
return builder.length()<S.length()?builder.toString():S;
}
}
Result
复杂度分析
- 时间复杂度:O(N)
粉丝福利
⭐今天是坚持刷题更文的第79/100天
⭐各位的点赞、关注、收藏、评论、订阅就是一条创作的最大动力
⭐更多数据结构和算法讲解欢迎关注专栏《糊涂算法》
为了回馈各位粉丝,礼尚往来,给大家准备了一些学习资料