程序员面试金典 06. 字符串压缩

123 阅读1分钟

题目描述

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

示例1:

输入:"aabcccccaaa"
输出:"a2b1c5a3"

示例2:

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

解题思路:

这个题目比较简单, 直接遍历进行字符比较即可, 需要注意如果压缩后的字符串比原字符串长时, 需要返回原字符串

  1. 定义一个临时字符tempC和临时字符的个数count
  2. 遍历字符串如果当前字符与tempC相同, 则count+1, 否则就对当前已有的tempC和count进行result拼接, 并且重置tempC和count
  3. 遍历完成后需要将最后一次遍历的tempC和count也加入到result中
  4. 判断长度返回result或原字符串

示例代码

def compressString(self, S: str) -> str:
    if len(S) <= 0: return S
    result = ""
    tempC = S[0]
    count = 0
    for item in S:
        if tempC == item:
            count += 1
        else:
            result += f"{tempC}{count}"
            tempC = item
            count = 1
    result += f"{tempC}{count}"
    return S if len(result) >= len(S) else result