如果我有一個字符串(例如'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