首页 > 其他 > 详细

合法字符串 【动态规划】

时间:2015-07-05 07:14:18      阅读:292      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!