javascript – 给定字符串的所有可能组合
作者:互联网
我需要找到给定字符串的所有可能组合,从最小长度到最大长度.
interface allCombos(string: String, min: Number, max:Number): Array {}
所以如果我的输入字符串是’abcde’,并且我的最小长度是3,我希望结果为:
长度3:
[‘abc’, ‘abd’, ‘abe’, ‘acd’, ..., ‘bcd’, ‘bce’, ..., ‘eda’, ...]
连接长度4:
[‘abcd’, ‘abdc’, ‘acdb’, ‘acbd’, …etc]
与所有可能的组合连接,长度可达max参数.哪个不应高于输入字长.
我开始认为所有可能的组合都是Σ(3!4!… n!).但后来我发现我错了,因为对于每个长度子集,整个世界都有很多组合(例如6个字母串的3个长度组合).
社区可以帮我解决这个问题吗?
解决方案可以是JavaScript,Python甚至是伪代码.
编辑
为了知识的缘故.任何人都可以回答我,在这种情况下描述结果大小的公式?我知道它不是Σ(3!4!… n!).
解决方法:
您可以使用itertools.combinations
:
from itertools import combinations
["".join(li) for li in combinations('abcde', 3)]
这会给
['abc', 'abd', 'abe', 'acd', 'ace', 'ade', 'bcd', 'bce', 'bde', 'cde']
简要说明:
list(combinations('abcde', 3))
会给
[('a', 'b', 'c'),
('a', 'b', 'd'),
('a', 'b', 'e'),
('a', 'c', 'd'),
('a', 'c', 'e'),
('a', 'd', 'e'),
('b', 'c', 'd'),
('b', 'c', 'e'),
('b', 'd', 'e'),
('c', 'd', 'e')]
所以你的三个字母的所有组合.您可以在列表推导中加入单个元组.
如果你愿意,你当然可以轻松地把它放在一个循环中:
min_length = 3
max_length = 5
res = {str(i): ["".join(li) for li in combinations('abcde', i)] for i in range(min_length, max_length + 1)}
这给了
{'3': ['abc', 'abd', 'abe', 'acd', 'ace', 'ade', 'bcd', 'bce', 'bde', 'cde'],
'4': ['abcd', 'abce', 'abde', 'acde', 'bcde'],
'5': ['abcde']}
如果您想将它放在一个列表中:
import numpy as np
final_list = np.concatenate(res.values())
产量
array(['abc', 'abd', 'abe', 'acd', 'ace', 'ade', 'bcd', 'bce', 'bde',
'cde', 'abcde', 'abcd', 'abce', 'abde', 'acde', 'bcde'],
dtype='|S5')
标签:javascript,python,algorithm,combinatorics 来源: https://codeday.me/bug/20190828/1748844.html