Leecode 面试题 01.06. 字符串压缩

简介: Leecode 面试题 01.06. 字符串压缩

题目描述:

字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。

示例1:

输入:“aabcccccaaa”

输出:“a2b1c5a3”

示例2:

输入:“abbccd”

输出:“abbccd”

解释:“abbccd"压缩后为"a1b2c2d1”,比原字符串长度更长。

解题思路:由于这个题考虑的是压缩在一起的连续字符,我们自然可以用到StringBuilder或者StringBuffer 这个可增长的字符串的处理,并且由于这里没涉及到线程安全问题采用效率更高的StringBuilder。

将字符串转换成字符数组之后,去遍历的过程中只要第 i 个和第 i + 1个字符不相等那就可以直接拼接第i个字符及其连续的个数,直到遍历完整个字符数组。同时,我们还要锁定一个下标index,依次来决定最后一个字符的输出形式

当然在最后判断result的长度和字符串S的长度来决定输出哪一个

class Solution {
    public String compressString(String S) {
        //为0返回空字符串
        if(S.length() == 0){
            return "";
        }
        StringBuilder sb = new StringBuilder();
        char []chars = S.toCharArray();
        int count = 0;
        int index = 0;
        //遍历整个chars数组
        for(int i = 0;i < chars.length - 1;i++){
            count++;
            if(chars[i] != chars[i+1]){
                //直接跟上此时统计的字符和对应的数字
                sb.append(chars[i]).append(count);
                //重新开始,count置为0
                count = 0;
                //index为i+1
                index = i+1;
            }
        }
        //字符的最后一个
        sb.append(chars[index]).append(chars.length - index);
        //转换成字符串形式的
        String result = sb.toString();
        return result.length() < S.length() ? result : S;
    }
}


相关文章
|
6月前
|
存储
力扣面试经典题之数组/字符串
力扣面试经典题之数组/字符串
51 0
|
6月前
面试题 08.08:有重复字符串的排列组合
面试题 08.08:有重复字符串的排列组合
53 0
|
19天前
|
存储 NoSQL Redis
Redis常见面试题:ZSet底层数据结构,SDS、压缩列表ZipList、跳表SkipList
String类型底层数据结构,List类型全面解析,ZSet底层数据结构;简单动态字符串SDS、压缩列表ZipList、哈希表、跳表SkipList、整数数组IntSet
|
3月前
|
安全 Java 编译器
【Java基础面试二十九】、说一说你对字符串拼接的理解
这篇文章讨论了Java中字符串拼接的四种常用方式(使用`+`运算符、`StringBuilder`、`StringBuffer`和`String`类的`concat`方法),每种方式适用的场景,以及在不同情况下的性能考量。
|
3月前
|
Java
【Java基础面试二十八】、使用字符串时,new和““推荐使用哪种方式?
这篇文章讨论了在Java中使用字符串时,推荐使用双引号`""`直接量方式而不是使用`new`操作符,因为`new`会在常量池之外额外创建一个对象,导致更多的内存占用。
|
4月前
|
算法 Java
Java面试题:解释垃圾回收中的标记-清除、复制、标记-压缩算法的工作原理
Java面试题:解释垃圾回收中的标记-清除、复制、标记-压缩算法的工作原理
58 1
|
4月前
|
算法 Java 程序员
Java面试题:解释Java的垃圾回收机制,包括常见的垃圾回收算法。介绍一下Java的垃圾回收算法中的标记-压缩算法。
Java面试题:解释Java的垃圾回收机制,包括常见的垃圾回收算法。介绍一下Java的垃圾回收算法中的标记-压缩算法。
49 0
|
4月前
|
存储 安全 Java
Java面试题:请解释Java中的字符串和字符串缓冲区?
Java面试题:请解释Java中的字符串和字符串缓冲区?
31 0
|
5月前
|
存储 算法 数据挖掘
深入解析力扣166题:分数到小数(模拟长除法与字符串操作详解及模拟面试问答)
深入解析力扣166题:分数到小数(模拟长除法与字符串操作详解及模拟面试问答)
|
6月前
|
存储 算法 安全
【刷题】 leetcode 面试题 01.06 字符串压缩
来看效果: 非常好!!!过啦!!!
63 5
【刷题】 leetcode 面试题 01.06 字符串压缩