码迷,mamicode.com
首页 > 其他好文 > 详细

合法字符串 【动态规划】

时间:2015-07-05 07:15:48      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

字符串只有可能有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)

版权声明:本文为博主原创文章,未经博主允许不得转载。

合法字符串 【动态规划】

标签:

原文地址:http://blog.csdn.net/u014427196/article/details/46760729

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!