leetcode_1957 删除字符使字符串变好

131 阅读1分钟

要求

一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 。

给你一个字符串 s ,请你从 s 删除 最少 的字符,使它变成一个 好字符串 。

请你返回删除后的字符串。题目数据保证答案总是 唯一的 。

示例 1:

输入:s = "leeetcode"
输出:"leetcode"
解释:
从第一组 'e' 里面删除一个 'e' ,得到 "leetcode" 。
没有连续三个相同字符,所以返回 "leetcode"

示例 2:

输入:s = "aaabaaaa"
输出:"aabaa"
解释:
从第一组 'a' 里面删除一个 'a' ,得到 "aabaaaa" 。
从第二组 'a' 里面删除两个 'a' ,得到 "aabaa" 。
没有连续三个相同字符,所以返回 "aabaa"

示例 3:

输入:s = "aab"
输出:"aab"
解释:没有连续三个相同字符,所以返回 "aab"

提示:

  • 1 <= s.length <= 105
  • s 只包含小写英文字母。

核心代码

class Solution:
    def makeFancyString(self, s: str) -> str:
        q = []
        count = 0
        for c in s:
            if q and c == q[-1]:
                count += 1
            else:
                count = 1
            if count < 3:
                q.append(c)
        return ''.join(q)

image.png

解题思路:统计连续的相同字符个数,超过2不加入最终字符串,我们可以看到程序中count < 3的时候是加入字符的,大于等于三个都是要清理掉的,比较简单。