W3Cschool高階指令碼演算法(5.排列組合去重演算法挑戰)
阿新 • • 發佈:2018-12-11
排列組合去重演算法挑戰
問題:
把一個字串中的字元重新排列生成新的字串,返回新生成的字串裡沒有連續重複字元的字串個數.連續重複只以單個字元為準
例如, aab
應該返回 2 因為它總共有6中排列 (aab
, aab
, aba
, aba
, baa
, baa
), 但是隻有兩個 (aba
and aba
)沒有連續重複的字元 (在本例中是 a
).
要求:
permAlone("aab")
應該返回一個數字.
permAlone("aab")
應該返回 2.
permAlone("aaa")
應該返回 0.
permAlone("aabb")
應該返回 8.
permAlone("abcdefa")
permAlone("abfdefa")
應該返回 2640.
permAlone("zzzzzzzz")
應該返回 0.
問題答案:
function permAlone(str) { var len = str.length; var newstr = ""; //遞迴 function permute(str){ var result = []; if(str.length == 1) { return [str]; } else { var temp = permute(str.slice(1)); for(var i = 0;i < temp.length; i++) { for(var j = 0;j < temp[i].length+1; j++) { newstr = temp[i].slice(0,j) + str[0] + temp[i].slice(j); result.push(newstr); } } return result; } } var final = permute(str); var re = /([A-Za-z])\1+/g ; final = final.filter(function(element){ return !element.match(re); }); return final.length; } permAlone('aab');