AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

K0009. 魔法二进制流的目标锁定

中等通过率 65% · 提交 141 · 通过 92
滑动窗口双指针贪心

小慕正在处理一段由二进制数据流组成的字符串,其中每个字符要么是 `0`,要么是 `1`。他的目标是通过一个 让某个 目标值 `target`(`0` 或 `1`)在数据流中形成尽可能长的连续区域。 反转操作 定义为:将数据流中的一个 `0` 改为 `1` 或将一个 `1` 改为 `0`。 请帮助小慕计算在最多执行一次反转操作后,

提示:带虚线的词点一下有通俗解释。

输入描述

输入共两行: 1. 第一行输入一个整数 `target`,表示目标魔法值,取值为 `0` 或 `1`。 2. 第二行输入一个长度为 `length` 的二进制字符串 `bits`,每个字符为 `0` 或 `1`,满足 $1 \leq length \leq 10,000$。

输出描述

输出一个整数,表示通过最多一次反转操作后,目标值的最大连续长度。

示例

示例 1

输入

1
1011010111

输出

5

说明:- 将第 7 位的 `0` 反转为 `1`,使得字符串变为 `1011011111`。 - 目标值 `1` 的最长连续区域为 `11111`,长度为 5。

示例 2

输入

0
10101

输出

3

说明:- 将第 3 位的 `1` 反转为 `0`,使得字符串变为 `10001`。 - 目标值 `0` 的最长连续区域为 `000`,长度为 3。

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
反转操作图解(示例:target=1) 原始字符串: 反转后字符串: 1 0 1 1 0 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 反转 连续5个1 操作:将第5位(0)反转为1 结果:得到连续5个1,长度为5
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「魔法二进制流的目标锁定」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。