小编典典

在带有重复项的所有可能排列的列表中查找给定字符串的等级

algorithm

我试图在排列列表中找到给定字符串的排名,并希望有人可以找到该错误。

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


阅读 212

收藏
2020-07-28

共1个答案

小编典典

这是演示

对于每个位置,检查剩下多少个字符重复,并使用以下逻辑:如果需要排列n个事物,并且如果“ a”个事物相似,则排列数量为 n!/a!

2020-07-28