主要算法 就是 用总的排列次数 减去 随机2个一样的字符 的总排列次数 在加上重复的次数
function permAlone(str) {
var param = str.split("");
var json = {};
var n = 0;
var alltimes = jiechang(str.length);
var map = {};
var k = 0;
for(var x in param){
if(!json[param[x]]){
k++;
}
if (json[param[x]] && !map[param[x]]) {
n++;
map[param[x]] = 1;
}
json[param[x]] = 1;
}
if(k == 1){
return 0;
}
var reducetimes = jiechang(str.length - 1) * Math.pow(2,n);
var chongfutimes = jiechang(str.length - n) * Math.pow(2,n);
if(n == 1){
chongfutimes = 0;
}
return alltimes - reducetimes + chongfutimes;
}
function jiechang(n){
if(n < 1){
return 1;
}
return n * jiechang(n-1);
}
permAlone('aaabb');