📜  要删除的最少字母以使给定字母的所有出现连续(1)

📅  最后修改于: 2023-12-03 14:57:21.380000             🧑  作者: Mango

题目描述

给定一个字符串,求删除最少的字符,使得该字符串中所有出现的字母都连续。

示例

输入:"abbccdee"

输出:1

解题思路

我们可以遍历字符串中每种字母,将其与相邻的字母进行比较。

如果相邻的字母之间的距离大于1,则将该字母的出现次数与相邻字母出现次数加起来,减去中间隔着的字母出现次数,得到需要删除的最少字母数。

最后统计每种字母需要删除的最少字母数,并返回其中的最小值。

代码实现
def minDeletion(s: str) -> int:
    # 统计每种字母出现的次数
    count = {}
    for ch in s:
        if ch in count:
            count[ch] += 1
        else:
            count[ch] = 1
    
    # 遍历每种字母,计算需要删除的最少字母数
    min_del = len(s)
    for ch, num in count.items():
        left = s.find(ch)  # 字母第一次出现的位置
        right = s.rfind(ch)  # 字母最后一次出现的位置
        del_num = num - (right - left + 1)  # 需要删除的字母数
        if del_num < min_del:
            min_del = del_num
    
    return min_del
复杂度分析
  • 时间复杂度:$O(n)$,其中 $n$ 为字符串长度。
  • 空间复杂度:$O(k)$,其中 $k$ 为字符串中不同的字母数。这里用到了字典来存储统计结果。