题目:
一个只包含’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 |
---|