字符串只有可能有A、B、C三个字母组成,如果任何紧邻的三个字母相同,就非法。求长度为n的合法字符串有多少个?比如: ABBBCA是非法,ACCBCCA是合法的。
动态规划的思路——真的要枚举么?
dp[i][0] : 长度为i的、最后两位不同的合法串的个数
dp[i][1]: 长度为 i的、最后两位相同的合法串的个数
递推: dp[i][0] = (dp[i-1][0] * 2 + dp[i-1][1] * 2)
dp[i][1] = dp[i-1][0]
初值
dp[1][0] = 3, dp[1][1] = 0
结果
dp[n][0] + dp[n][1]
空间优化
dp[i][0,1]只与dp[i-1][0,1]相关,可以省掉高维
时间复杂度
O(n)
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-26 23:14:31