我试图在排列列表中找到给定字符串的排名,并希望有人可以找到该错误。
function permute() { var W = $('input').val(), C = []; for (var i = 0; i < 26; i++) C[i] = 0; var rank = 1; for (var i = 0; i < W.length; i++) { C[W.charCodeAt(i) - 'a'.charCodeAt(0)]++; } var repeated= 1; for (var i = 0; i < C.length; i++) { if(C[i] > 0) { repeated *= fact(C[i]); } } if (W !== '') { for (var i = 0; i < W.length; i++) { //How many characters which are not used, that come before current character var count = 0; for (var j = 0; j < 26; j++) { if (j == (W.charCodeAt(i) - 'a'.charCodeAt(0))) break; if (C[j] > 0) count++; } C[W.charCodeAt(i) - 'a'.charCodeAt(0)] = 0; rank += ( count * fact(W.length - i - 1) ); } rank = rank/ repeated; } var pp = 'Rank of :: ' + W + ' -- ' + rank; $('div').append('<p>' + pp + '</p>'); } function fact(n) { if (n == 0 || n == 1) return 1; else return fact(n - 1) * n; } $('button').click(permute);
检查小提琴
一个用例可能是
bookkeeper应该被 评为10743 。
bookkeeper
这是演示:
对于每个位置,检查剩下多少个字符重复,并使用以下逻辑:如果需要排列n个事物,并且如果“ a”个事物相似,则排列数量为 n!/a!
n!/a!