给定一个仅由4个不同字母组成的字符串,它有多少种不包含两个连续字母的排列?



给定字符串S,由字母a, B, C, D组成,每个字母在S中最多出现10S有多少S的排列不包含2连续字母?

例如给定

A: 3 times, B: 1 time, C: 1, D: 0
ABACA is valid
AABAC is invalid

我已经尝试过包含排除,但我的模型还没有能够产生一组很好的属性来使用这个原则。

是有公式还是我错过了什么?

这是动态规划

从头开始创建每个排列,因此您每次在字符串末尾添加一个字母假设您刚刚使用了字母"A",下一个字母不能是"A",并且您比之前少了一个字母"A",因此您继续此过程,直到您用完字母

让是

f(prohibited, A, B, C, D)

大小为A + B + C + D的字符串的个数,可以使用A字母'A',B字母'B',…这个字符串不能以禁止的

开头假设forbidden = 'A',那么你有3个选项可以选择:

从字母'B'开始,然后,下一次,禁止是'B'并且你有B - 1字母'B',即

f('B', A, B - 1, C, D)

如果你选择了'C'而不是'B',那么禁止是'C',你有C - 1个字母剩余

那么对

进行求和
f('A', A - 1, B, C, D) + f('B', A, B - 1, C, D) ...

应该可以了

最新更新