题目:
一个只包含’A’、’B’、’C’的字符串,如果存在一段长度为3的连续子串中,恰好有’A’、’B’、’C’各有一个,那么这个字符串就是纯净字符串,否则这个字符串是暗黑的。
例如:BAACAACCBAAA这个字符串就是暗黑的。例如:
BAACAACCBAAA这个字符串就是纯净的,因为其连续子串中包含了’C’、’B’、’A’各一个。
你的任务就是计算出长度为n的字符串(包含’A’、’B’、’C’),有多少个是暗黑的字符串。
比如输入:
2
3
输出:
9
21
分析:
首先
| ? |
|---|
n = 1的情况下,有A、B、C三种情况。
| ? | ? |
|---|
AA、AB、AC、BA、BB、BC、CA、CB、CC,9种情况
| ? | ? | ? |
|---|
其实一开始我的想法是3^3 = 27减去ABC的排列3 X 2 X 1 = 6,也就是21种。但是从这个角度一直考虑下去,其实是错的。
应该从n = 2的基础上分析。首先n = 3是从n =2的基础上扩展一位,首先我们假设后面两位是不同的(比如C、A)的那只能后面两位选其中一位。f(n) = 2 * f(n - 1)。但是考虑到最后两位一样的情况,f(n - 1)中有两位相同的数量,是f(n - 2)数量的个数,因为必须和f(n-2)的最后一位一样。
比如:
| n = 1 |
|---|

该博客介绍了如何解决一道关于计算只包含'A'、'B'、'C'的字符串中,长度为n的暗黑字符串数量的问题。博主分析了递推公式,并提供了具体的计算方法,最终得出递推公式f(n) = 2f(n - 1) + f(n - 2),并给出了代码实现。
最低0.47元/天 解锁文章
1334

被折叠的 条评论
为什么被折叠?



