如果我有一个字符串(例如'AABC'),如何计算可能的唯一字符串的数量?计算可以从一个字符串中创建的唯一字符串的数量
在这种情况下,答案是12,但我怎样才能用算法来判断这个问题?
我可以做'ABC',但重复的人物让我困惑。
我试图做到这一点在Python
编辑:另外,我不希望生成所有可能的字符串,只计算数量。
如果我有一个字符串(例如'AABC'),如何计算可能的唯一字符串的数量?计算可以从一个字符串中创建的唯一字符串的数量
在这种情况下,答案是12,但我怎样才能用算法来判断这个问题?
我可以做'ABC',但重复的人物让我困惑。
我试图做到这一点在Python
编辑:另外,我不希望生成所有可能的字符串,只计算数量。
你可以通过所有的排列行走和使用itertools模块里
import itertools
string = "AABC"
count = len(set(itertools.permutations(string)))
print(count)
算唯一一个,但因为你只需要计数,你可以做多一点轻松:
import math
import collections
string = "AABC"
chars = collections.Counter(string)
denominator = reduce(lambda x,y: x * math.factorial(y), chars.values(), 1)
count = math.factorial(len(string))/denominator
print(count)
你是对的!编辑。 – linus 2014-11-05 23:56:21
更容易/更有效/ – gboffi 2014-11-05 23:58:12
哇,这是超级令人印象深刻,似乎是正确的,有点谷歌搜索导致我相信它与二项式系数有关,但维基百科的文章远远超出了我。用俗语说,你能解释一下吗? – bleurhgarator 2014-11-06 00:28:14
你可以用itertools模块来做到这一点。
打开你的python解释器。
import itertools
for unique in itertools.permutations("AABC"):
print "".join(unique)
只要改变 “AABC” 与任何你想要的。
你还没有注意到问题标题中的*** unique ***这个词。 – gboffi 2014-11-05 23:44:40
**提示**“set”的主要属性是什么?它的元素是***独一无二的***。你如何从一个迭代器创建一个'set'? '设置(迭代)'。 'set'是可迭代的吗?哦,是的。 – gboffi 2014-11-05 23:54:47
非常感谢,但是对于大字符串,当需要的只是计数时,这将非常耗时。它在上面钉牢了它。 – bleurhgarator 2014-11-06 01:16:38
看看http://stackoverflow.com/questions/361/generate-list-of-all-possible-permutations-of-a-string – Celeo 2014-11-05 23:26:05
我不认为这些适用。我尝试了一些并给出'AABC'它会生成多个相同的字符串。 – bleurhgarator 2014-11-06 00:06:07