2014-11-05 32 views
1

如果我有一个字符串(例如'AABC'),如何计算可能的唯一字符串的数量?计算可以从一个字符串中创建的唯一字符串的数量

在这种情况下,答案是12,但我怎样才能用算法来判断这个问题?

我可以做'ABC',但重复的人物让我困惑。

我试图做到这一点在Python

编辑:另外,我不希望生成所有可能的字符串,只计算数量。

+0

看看http://stackoverflow.com/questions/361/generate-list-of-all-possible-permutations-of-a-string – Celeo 2014-11-05 23:26:05

+0

我不认为这些适用。我尝试了一些并给出'AABC'它会生成多个相同的字符串。 – bleurhgarator 2014-11-06 00:06:07

回答

2

你可以通过所有的排列行走和使用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) 
+0

你是对的!编辑。 – linus 2014-11-05 23:56:21

+0

更容易/更有效/ – gboffi 2014-11-05 23:58:12

+0

哇,这是超级令人印象深刻,似乎是正确的,有点谷歌搜索导致我相信它与二项式系数有关,但维基百科的文章远远超出了我。用俗语说,你能解释一下吗? – bleurhgarator 2014-11-06 00:28:14

0

你可以用itertools模块来做到这一点。

打开你的python解释器。

import itertools 
for unique in itertools.permutations("AABC"): 
    print "".join(unique) 

只要改变 “AABC” 与任何你想要的。

+0

你还没有注意到问题标题中的*** unique ***这个词。 – gboffi 2014-11-05 23:44:40

+0

**提示**“set”的主要属性是什么?它的元素是***独一无二的***。你如何从一个迭代器创建一个'set'? '设置(迭代)'。 'set'是可迭代的吗?哦,是的。 – gboffi 2014-11-05 23:54:47

+0

非常感谢,但是对于大字符串,当需要的只是计数时,这将非常耗时。它在上面钉牢了它。 – bleurhgarator 2014-11-06 01:16:38

相关问题