1. 程式人生 > >W3Cschool高階指令碼演算法(5.排列組合去重演算法挑戰)

W3Cschool高階指令碼演算法(5.排列組合去重演算法挑戰)

排列組合去重演算法挑戰

問題:

把一個字串中的字元重新排列生成新的字串,返回新生成的字串裡沒有連續重複字元的字串個數.連續重複只以單個字元為準

例如, 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")

應該返回 3600.

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');

題目連結: