面试题 01.06. 字符串压缩

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

面试题 01.06. 字符串压缩


Table of Contents

一、中文版

二、英文版

三、My answer

四、解题报告


一、中文版

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


示例1:


输入:"aabcccccaaa"

输出:"a2b1c5a3"


示例2:


输入:"abbccd"

输出:"abbccd"

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


提示:


字符串长度在[0, 50000]范围内。


来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/compress-string-lcci

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


二、英文版

Implement a method to perform basic string compression using the counts of repeated characters. For example, the string aabcccccaaa would become a2blc5a3. If the "compressed" string would not become smaller than the original string, your method should return the original string. You can assume the string has only uppercase and lowercase letters (a - z).
Example 1:
Input: "aabcccccaaa"
Output: "a2b1c5a3"
Example 2:
Input: "abbccd"
Output: "abbccd"
Explanation: 
The compressed string is "a1b2c2d1", which is longer than the original string.
Note:
0 <= S.length <= 50000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/compress-string-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


三、My answer

class Solution:
    def compressString(self, S: str) -> str:
        if not S:
            return ""
        s_list = list(S)
        res = ''
        i = 1
        base = 1
        while i < len(s_list):            
            if s_list[i] == s_list[i-1]:                
                base += 1
            else:
                res = res + str(s_list[i-1]) + str(base)
                base = 1
            i += 1
        res = res + str(s_list[len(s_list)-1]) + str(base)
        if len(res) >= len(S):
            return S
        return res


四、解题报告

上面代码中,base 用来统计每个字母出现的个数,当发现当前字母与前一个字母不一样时,base 重置为0。


此外,最后一个字母需要特殊判别,也就是 while 循环结束后还要再处理一下 res 的原因。


下面官方题解更简洁清晰,记录学习:

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

热门文章

最新文章