python - 将 Python 中的 2 个字符排列成固定长度的字符串,每个字符的数量相等

标签 python string algorithm permutation

我已经查看了下面的 2 个问题,它们似乎最接近我要问的问题,但不要让我找到问题的答案。

Permutation of x length of 2 characters

How to generate all permutations of a list in Python

我正在尝试找到一种方法来获取 2 个字符,例如“A”和“B”,然后将这些字符的所有唯一排列组合成一个 40 个字符的字符串。另外-我需要每个字符在字符串中出现 20 次。因此,所有结果字符串各有 20 个“A”和 20 个“B”。

像这样:

'AAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBB'
'AAAAAAAAAAAAAAAAAAABABBBBBBBBBBBBBBBBBBB'
'AAAAAAAAAAAAAAAAAABAABBBBBBBBBBBBBBBBBBB'

等...

我真正需要的是遵循这些规则的唯一组合的数量。

y=['A','A','A','A','B','B','B','B']
comb = set(itertools.permutations(y))
print("Combinations Found: {:,}".format(len(comb)))

这可行,但它不能很好地扩展到 20 个“A”和 20 个“B”的输入字符串。上面的代码执行需要 90 秒。即使只是扩展到 10 个“A”和 10 个“B”,在我杀死它之前也运行了 20 分钟。

鉴于我所描述的参数,是否有更有效的方法来解决这个问题?

最佳答案

如果您只需要计数,这可以概括为 n choose k .您的总大小为 n"A" 的元素数为 k。所以,你的答案是:

(n 选择 k)=(40 选择 20)= 137846528820

关于python - 将 Python 中的 2 个字符排列成固定长度的字符串,每个字符的数量相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39936344/

相关文章:

algorithm - 确定网格上的一个点是否被某种类型的点包围

python - 是否可以使用 python 恢复给定统一差异和原始文本的文本

python - 如何使用 PIL 将 python 图像放在一起?

python - 任何 Python 脚本来保存像 Firefox 这样的网站?

c++ - Operator= 在 C++ 中重载

c++ - 如何在 C++11 中将 u32string 转换为 int?

c - 针对动态/静态/增量数据的专用哈希表算法

python - 使用 matplotlib 生成许多图形的最有效方法

javascript - 如何在字符串中引用/插入 href 变量?

algorithm - 创建交替链的最少切换