c++ - 查找禁止字符串程序

标签 c++ string algorithm dynamic-programming combinatorics

我最近遇到了下面这个问题:

一个字符串如果连续出现三个字母,其中一个是A,一个是B, 一个是 C。例如 BAAAACABCC 是被禁止的,但 AAABBBCCC 不是。 给你一个整数 n。你必须找出有多少个长度为 n 的字符串没有被禁止。 (n 将从 1 到 30)
示例:如果 n=2,则没有字符串是禁止的。所以输出是 9。

我尝试过但找不到有效的解决方案。我确实为此编写了一个强力算法,其中我检查了所有可能的此类字符串,但由于它是一个指数算法,所以它非常慢。你可以找到我的代码 here

有人可以为此指导我一个有效的算法,也许使用动态规划或任何其他方式。

谢谢

最佳答案

从数列来看:3,9,21,51,123 下一个数字是 123 * 2 + 51 = 297

关于c++ - 查找禁止字符串程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19773831/

相关文章:

c++ - 如何将 PHI 节点添加到每个基本 block 的开头

c - 我如何计算没有。字符串数组中的字符串?

algorithm - 大哦符号

c++ - SSE1 使用 divps intrinsic xmmintrin.h 划分四个 32 位 float 并使用 printf?

c++ - 运算符重载: calling friend function from member function

C++ std::this_thread::get_id() 传递给 cout

java - 数数元音、辅音,并在字符串中打印它们的计数和乘积

java - Scala RegEx 字符串提取器的行为不一致

algorithm - 二维矩阵中大小为 HxW 的最大子数组

python - 用模式划分整数