📌  相关文章
📜  给定二进制字符串中唯一索引 10 或 01 子字符串的最大计数(1)

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

给定二进制字符串中唯一索引 10 或 01 子字符串的最大计数

问题描述

给定一个长度为n的二进制字符串s,计算其中最长的不含相邻 0 的子字符串的长度。

示例

输入:"0011100" 输出:3 解释:最长的不含相邻 0 的子字符串是 "110",长度为 3。

思路
  1. 可以先遍历字符串s,记录当前最长的不含相邻 0 的子字符串长度max_len和当前不含相邻 0 的子字符串长度cur_len,如果当前位为 1,cur_len+1;如果当前位为 0,cur_len清零。同时更新max_len的值。
  2. 由于题目要求的是最长的 "01" 或 "10" 子字符串,因此我们可以把字符串先转换成"01"串或者"10"串,如果遇到相邻的 1 或者 0,则将其修改为 0 或者 1。转换后再按照第一步的方法计算最长不含相邻 0 子字符串的长度,即为所求结果。
代码片段
def max_01_10_count(s: str) -> int:
    # 将字符串转换为 01 串
    s = s.replace('10', '1 0').replace('01', '0 1').split()

    # 计算最长不含相邻 0 的子字符串长度
    max_len, cur_len = 0, 0
    for i in range(len(s)):
        if s[i] == '1':
            cur_len += 1
        else:
            max_len = max(max_len, cur_len)
            cur_len = 0

    return max(max_len, cur_len)

注意:本代码片段包含了函数定义,同时也包含了函数参数的类型注解和返回值的类型注解。