📌  相关文章
📜  所需的最小删除量,以便给定的字符串仅包含一对交替字符(1)

📅  最后修改于: 2023-12-03 15:39:40.344000             🧑  作者: Mango

题目介绍

给定一个字符串,现在需要找出所需要的最小删除量,以便给定的字符串仅包含一对交替字符(即存在一个字符,它与其相邻两个字符都不同)。删除量是指移除字符串中的字符数。

例如:

输入: "ABAACDAA"
输出: 2
说明: 删除2个字符,剩下的字符串为"ABACAA",其中只有一对交替字符。

思路解析

我们可以遍历字符串,同时使用一个变量来记录上一个出现的字符。当我们找到当前字符与上一个字符相同的情况时,就可以把它删掉。

具体步骤如下:

  1. 初始化计数器count为0,上一个字符last为字符串的第一个字符。

  2. 从第二个字符开始遍历字符串。

  3. 如果当前字符与上一个字符相同,就将count加1。

  4. 如果当前字符与上一个字符不同,就将last设为当前字符。

  5. 遍历完整个字符串后,count就是所需的最小删除量。

代码实现

def minDeletions(s: str) -> int:
    count = 0
    last = s[0]
    for i in range(1, len(s)):
        if s[i] == last:
            count += 1
        else:
            last = s[i]
    return count

示例

输入: "ABAACDAA"
输出: 2
解释: 删除2个字符,剩下的字符串为"ABACAA",其中只有一对交替字符。

输入: "AAAAAA"
输出: 5
解释: 删除5个字符,剩下的字符串为空。

时间复杂度

遍历字符串只需要一次,时间复杂度为$O(n)$。