题目描述
给定一个只包含大写英文字母的字符串S,要求你给出对S重新排列的所有不相同的排列数。
如:S为ABA,则不同的排列有ABA、AAB、BAA三种
输入描述
输入一个长度不超过10的字符串S,我们确保都是大写的。
输出描述
输出S重新排列的所有不相同的排列数(包含自己本身)。
示例一
输入
ABA
输出
3
示例二
输入
ABCDEFGHHA
输出
907200
分析:以示例二为例,统计各字符出现的次数,A-2, B-1, C-1, D-1, E-1, F-1, G-1, H-2。字符串长度为10,所有组合方式情况的计算方式就是
结果
function fn(str){
let obj = {};
for(let i = 0;i<str.length;i++){
let key = str[i];
if(obj.hasOwnProperty(key)){
obj[key]++;
}else{
obj[key] = 1;
}
}
let sum = 1;
let len = str.length;
Object.keys(obj).forEach(e=>{
let value = obj[e];
for(let i=len,j=value;i>len-value,j>0;i--,j--){
sum = (sum * i) / j
}
len -=value;
})
console.log(sum);
}