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