📅  最后修改于: 2023-12-03 14:57:25.939000             🧑  作者: Mango
在这个问题中,我们需要计算长度为 $n$ 的二进制字符串中,前半部分有两个连续的 $0$ 的字符串数量。例如,当 $n=5$ 时,合法字符串为 00110
和 00111
,总共有 2 种可能。
我们可以通过观察可知,满足条件的字符串可以分为两类:
以 10
开头的字符串。可以发现,这种类型的字符串可以在后面随意添加 $n - 2$ 位,得到合法的长度为 $n$ 的字符串。因此这种类型的字符串的数量为 $2^{n-2}$。
以 11
开头的字符串。这种类型的字符串后面必定为 00
,所以只需要在中间添加 $n - 4$ 位即可。因此这种类型的字符串的数量为 $2^{n-4}$。
因此,我们可以根据上述两种情况的数量来计算答案。最后的答案即为两种情况的数量之和。
class Solution:
def countBinarySubstrings(self, n: int) -> int:
if n < 2:
return 0
count, prev_count = 0, 0
for i in range(2, n + 1):
if i == 2:
count = 1
elif i == 3:
count = 2
else:
count = prev_count + 2 ** (i - 4) if i % 2 == 0 else prev_count
prev_count = count
return count