我試圖在排列列表中找到給定字符串的排名,並希望有人能找到該錯誤。查找給定字符串在所有可能的排列列表中的排名重複
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的排名..但我認爲我已經搞砸了 –
當你給它「簿記員」時,這是一個相當明顯的錯誤...你應該編輯它,以便其他人可能會注意到它。 –