我正在查找按字典順序排列的最小字串的排列數。
例如,bbaa現在字典上最小的字串是aabb
所以,排列是,
(1,2,3,4), (2,1,3,4), (1,2,4,3), (2,1,4,3) 這是 4。
我的想法(在 python 中)是找到最小的字串(基本上將它排序為一個字串),然后創建一個計數器來存盤每個字符的計數。
因為,我們不需要一個按字典順序變大的字串,我們只能交換相同的字符。
比如,aaabbbcca 有 3 個位置,b 有 3 個位置,c 只有 2 個。
這使得排列的數量成為可能, (3*3*2)
這可以通過乘以計數器的值來實作。但是這種方法錯過了一些重要的東西,因為很明顯,它沒有通過。我發現了一個字串,它偏離了這種方法:
hjkegfghjkdcoiuyg
長度: 18
排序: cdefggghhijjkkouy
柜臺:
Counter({'g': 3, 'h': 2, 'j': 2, 'k': 2, 'c': 1, 'd': 1, 'e': 1, 'f': 1, 'i': 1, 'o': 1, 'u': 1, 'y': 1})
編輯:
所以根據我的演算法,答案應該是上面提到的24。但實際答案是“48”,這是兩次,我試圖找出一些關系或者可能是一個愚蠢的錯誤,但沒有愚蠢的錯誤。
uj5u.com熱心網友回復:
您需要乘以字符數的階乘。這是因為 3 個相同的字母會產生3! = 6排列:
(1,2,3) (1,3,2) (2,1,3) (2,3,1) (3,1,2) (3,2,1)
在這個例子中,3! * 2! * 2! * 2! = 6 * 2 * 2 * 2 = 48.
uj5u.com熱心網友回復:
計數排列是用階乘完成的。你的答案應該是3! * 2! * 2! * 2!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/335903.html
