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;
    }
}


相关文章
|
2月前
|
存储
力扣面试经典题之数组/字符串
力扣面试经典题之数组/字符串
31 0
|
2月前
面试题 08.08:有重复字符串的排列组合
面试题 08.08:有重复字符串的排列组合
33 0
|
21天前
|
存储 算法 数据挖掘
深入解析力扣166题:分数到小数(模拟长除法与字符串操作详解及模拟面试问答)
深入解析力扣166题:分数到小数(模拟长除法与字符串操作详解及模拟面试问答)
|
2月前
|
存储 算法 安全
【刷题】 leetcode 面试题 01.06 字符串压缩
来看效果: 非常好!!!过啦!!!
39 5
【刷题】 leetcode 面试题 01.06 字符串压缩
|
2月前
|
索引 Python Go
【python学习】字符串详解,面试必问公司的问题
【python学习】字符串详解,面试必问公司的问题
|
2月前
|
存储 Go 开发者
Golang深入浅出之-Go语言字符串操作:常见函数与面试示例
【4月更文挑战第20天】Go语言字符串是不可变的字节序列,采用UTF-8编码。本文介绍了字符串基础,如拼接(`+`或`fmt.Sprintf()`)、长度与索引、切片、查找与替换(`strings`包)以及转换与修剪。常见问题包括字符串不可变性、UTF-8编码处理、切片与容量以及查找与替换的边界条件。通过理解和实践这些函数及注意事项,能提升Go语言编程能力。
39 0
|
2月前
面试题 01.06. 字符串压缩
面试题 01.06. 字符串压缩
11 0
|
2月前
|
算法 测试技术 索引
力扣面试经典题之数组/字符串(二)
力扣面试经典题之数组/字符串(二)
18 0
|
2月前
|
存储 Java 编译器
Java字符串变量声明与赋值的常见面试题——完整剖析
Java字符串变量声明与赋值的常见面试题——完整剖析
25 1
|
2月前
Leecode之面试题消失的数字
Leecode之面试题消失的数字