📌  相关文章
📜  要删除的最小字符数以使二进制字符串交替(1)

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

题目描述

给定一个二进制字符串,您需要删除最小数量的字符,以使其成为一个交替的字符串,即0和1交替出现。一个字符串可以是交替的,如果没有连续的重复字符。

解题思路

此题需要找到二进制字符串中连续相同子串的出现次数并统计,最后将其删除,剩余字符数即为所需删除的最小字符数。

具体步骤如下:

  1. 定义一个变量 count 并初始化为0,表示连续相同子串的出现次数。
  2. 遍历二进制字符串,从第二个字符开始比较其与前面一个字符是否相同,若相同则 count 自增1。
  3. 若不相同,则更新 count 为1。
  4. count 的值大于1,则表示当前位置为连续相同子串的结束位置,将当前子串的长度减1,即删除最后一个字符,并将 count 重置为1。
  5. 统计删除的字符数量,并将其返回。
代码实现
def minDeletions(s: str) -> int:
    count, res = 1, 0
    n = len(s)
    for i in range(1, n):
        if s[i] == s[i-1]:
            count += 1
        else:
            if count > 1:
                res += count - 1
                count = 1
    if count > 1:
        res += count - 1
    return res
测试样例

输入:"1010101"

输出:0

输入:"1011110"

输出:1

输入:"111000"

输出:2

复杂度分析
  • 时间复杂度:$O(n)$,需要遍历整个字符串。
  • 空间复杂度:$O(1)$,只需要常数级别的额外空间。