2014-11-05 34 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

相關問題