📅  最后修改于: 2023-12-03 15:40:43.970000             🧑  作者: Mango
给定一个二进制串,求其中没有长度≥3的子串的个数。
设 $dp[i]$ 表示长度为 $i$ 且没有长度≥3的子串的数目。
我们考虑如何计算 $dp[i]$。
综上,$dp[i]=dp[i-2]+dp[i-2]=2 \times dp[i-2]$。
同时,对于 $i<2$,我们有 $dp[i]=2^i$,因为长度小于 2 的串不会有长度≥3的子串。
因此,我们可以用动态规划来计算答案,时间复杂度 $O(n)$。
def num_of_binary_strings(n):
dp = [0] * (n + 1)
dp[0] = 1
dp[1] = 2
for i in range(2, n + 1):
dp[i] = 2 * dp[i - 2]
return dp[n]
本题考察了动态规划中的状态设计和状态转移方程。
在状态设计上,我们需要思考如何设计状态才能描述问题的解。
在状态转移方程上,我们需要思考如何从已知状态推导出新的状态,同时确保状态转移的正确性。