字符序列(题解)

该博客探讨了如何生成符合条件的字符序列,即在给定的集合[A,B,C]中选取元素组成N个字符的序列,且没有连续重复的子序列。通过输入样例和输出样例展示了问题的具体要求,并提出了两种解题思路:一种基于字符比较的模拟方法,另一种将字符转换为数字并使用DFS(深度优先搜索)的简便算法。" 108639179,7809353,Jenkins用户密码修改指南,"['Jenkins', '密码管理', '系统管理', 'DevOps', '持续集成']

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

字符序列(characts)


问题描述:

从三个元素的集合[A,B,C]中选取元素生成一个N 个字符组成的序列,使得没有两个相邻的子序列(子序列长度=2)相同,例:N=5 时ABCBA 是合格的,而序列ABCBC 与ABABC 是不合格的,因为其中子序列BC,AB 是相同的。

输入N(1<=N<=12),求出满足条件的N 个字符的所有序列和其总数。

输入样例1:

4

输出样例1:

72

输入样例2:

2

输出样例2:

9

这道题可以用模拟的思想:给定一个字符串,对于当前这位和前面的第二位;这一位的前面的第一位和这一位前面的第三位,来进行比较。如果他们相等的话,就表明肯定是不符合的;如果他们不相等的话,就可以进行下一位的判断。

当然,这些是基于字符的操作。所以,还有一种更简便的算法:把A、B、C看作数字1、2、3,每次进行+1操作。如果+1后的数超过3,就可以从1开始继续加,最后用DFS串一下就可以解决了。

代码:

#include<cstdio>
#include<cmath>
#define</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值