字符串重排:给定一个只包含大写英文字母的字符串S,要求你给出对S重新排列的所有不相同的排列数。
如:S为ABA,则不同的排列有ABA、AAB、BAA三种。
示例 1: 输入: "ABA" 输出: 3
示例 2: 输入: "AABBCC" 输出: 90
解题思路:
先把每个字符当成唯一出现过一次,计算所有排列数;再统计重复出现的字母,除去每个字母的排列次数
参考链接:https://blog.youkuaiyun.com/lxycar/article/details/100921791
public class test1{
public static void main(String[] args) {
String s = "AABBCC";
int n = s.length();
int allSort = Asort(n);
HashMap<Character, Integer> map = new HashMap<>();
for (char c : s.toCharArray()) {
map.put(c,map.getOrDefault(c,0) + 1);
}
for (char key : map.keySet()) {
allSort /= Asort(map.get(key));
}
System.out.println(allSort);
}
public static int Asort(int n){
if(n == 1)
return