网易0912笔试题 暗黑字符串

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

一个只包含’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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值