计算字符串重新排列数

字符串重排:给定一个只包含大写英文字母的字符串S,要求你给出对S重新排列的所有不相同的排列数。
如:S为ABA,则不同的排列有ABA、AAB、BAA三种。

示例 1: 输入: "ABA" 输出: 3
示例 2: 输入: "AABBCC" 输出: 90

给个解题思路就行

以前写过一个现成的递归求所有排列组合,直接套用了,相信一定不是最优解,抛砖引玉:

def all_q(n):
    if len(n) == 1:return n
    q = []
    for i in n:
        b = n[:]
        b.remove(i)
        for j in all_q(b):
            q.append(i+j)
    return q

n = list(input())
print(len(set(all_q(n))))

给个调用第三方库的方式,优点是简单,而且可以输出所有排列结果,缺点是不透明,基本思路是先不考虑重复的问题,求输入字符串的字符全排列组合,然后用set去重,就可以了。

import itertools
a = 'AABBCC'
r = [''.join(s) for s in list(itertools.permutations(list(a),len(a)))]
print(len(set(r)))