w3cshool -- 排列组合去重算法挑战

Posted litings

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了w3cshool -- 排列组合去重算法挑战相关的知识,希望对你有一定的参考价值。

    function permAlone(str) {
        if(str.length == 1) return str;
        var a = str.substr(0, 1), one = [a], count = 0, toggle = true;
        for(var i = 0; i< str.length-1; i++) {
            var temp = str[i+1]; // 取出需要插入的字母
            one = cha(one, temp)
        }
        // 判断数组是否有连续重复的
        for(var k = 0; k<one.length; k++){ //获取数组中的每一项
            for(var l = 0; l<one[k].length-1; l++){ //遍历每一项的字符串
                if(one[k][l] == one[k][l+1]) { // 如果存在有连续两个相等的字母
                    // 决策变量,判断是否合格
                    toggle = false;
                    break;
                } else {
                    toggle = true;
                }
            }
            // 判断toggle 是否为true
            if(toggle) count++;
        }
        return count;
    }

    permAlone(‘abfdefa‘);

    /*
        插值算法
        str: 需要被插入的数组
        v: 需要插入的字母
     */
    function cha(str, v) {
        var len = str.length; // 获取数组长度
        var arr = [] // 最后需要返回的数组
        for(var i = 0; i<len; i++) {
            for(var j = 0; j<str[i].length+1; j++){ //需要插入的次数等于字符串长度加一
                var star = str[i].substring(0, j) 
                var end = str[i].substring(j, str[i].length);
                var ok = star + v + end;
                arr.push(ok);
            }
        }
        return arr;
    }

 

以上是关于w3cshool -- 排列组合去重算法挑战的主要内容,如果未能解决你的问题,请参考以下文章

排列组合的去重问题

关于各种排列组合java算法实现方法

Codeforces 991E. Bus Number (DFS+排列组合)

[Mdfs] lc90. 子集 II(组合类型枚举+多重背包+去重经典)

并行/组合多个 64 位值的按位排列

算法学习——递归和排列组合