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;
    }

 

posted @ 2018-08-01 11:30  木头人_a  阅读(721)  评论(0编辑  收藏  举报