📅  最后修改于: 2023-12-03 15:40:32.487000             🧑  作者: Mango
给定一个长度为 N 的二进制字符串,我们需要检查其长度为 K 的所有子字符串中 0 和 1 的数量是否相等。
对于长度为 K 的子字符串,我们可以用滑动窗口的方法来处理。维护一个长度为 K 的窗口,遍历整个字符串,每次将窗口向右移动一位,更新窗口中 0 和 1 的数量,然后判断它们是否相等。
具体实现如下:
def check_substring(s: str, k: int) -> bool:
n = len(s)
if k > n:
return False
zeros = ones = 0
for i in range(k):
if s[i] == '0':
zeros += 1
else:
ones += 1
if zeros == ones:
return True
for i in range(k, n):
if s[i - k] == '0':
zeros -= 1
else:
ones -= 1
if s[i] == '0':
zeros += 1
else:
ones += 1
if zeros == ones:
return True
return False
该算法的时间复杂度为 O(N),需要遍历整个字符串。
>>> check_substring('110011', 2)
True
>>> check_substring('110011', 3)
False