字符串重排:给定一个只包含大写英文字母的字符串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)))