欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js-FCC算法-No repeats please字符串的全排列(詳解)

 更新時間:2017年05月02日 10:26:26   投稿:jingxian  
下面小編就為大家?guī)硪黄猨s-FCC算法-No repeats please字符串的全排列(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

把一個字符串中的字符重新排列生成新的字符串,返回新生成的字符串里沒有連續(xù)重復字符的字符串個數(shù).連續(xù)重復只以單個字符為準

例如, aab 應該返回 2 因為它總共有6中排列 (aab, aab, aba, aba, baa, baa),但是只有兩個 (aba and aba)沒有連續(xù)重復的字符 (在本例中是 a).

從網(wǎng)上資料獲得了一些思路,我的代碼:

function permAlone(str) {
 var arr=str.split("");
 var perarr=[];
 var begin=0;
 //創(chuàng)建正則,如果字符串全重復,則直接return 0
 var reg = /(.)\1+/g;
 if(str.match(reg)!==null&&str.match(reg)[0]===str){
  return 0;
 }
 //用于交換的函數(shù)
 function swap(idx1,idx2){
   var temp=arr[idx1];
   arr[idx1]=arr[idx2];
   arr[idx2]=temp;
 }
 //如果begin到了最后一個字符,可以將這個字符串加入到全排列數(shù)組中了
 function permall(arr,begin){
  if(begin==arr.length-1){
   perarr[perarr.length]=arr.join("");
   return;
  }
  for(var i=0;(i+begin)<arr.length;i++){
   swap(begin,begin+i);
   permall(arr,begin+1);
   swap(begin,begin+i);
  }
 }
 permall(arr,begin);
 //返回相鄰不重復的數(shù)量
 return perarr.filter(function(val) {
   return !val.match(reg);
 }).length;
}

permAlone('aab');

首先,把第一個字符和其后面的字符一一交換。

接著,固定第一個字符,求后面所有字符的排列。這個時候我們?nèi)园押竺娴乃凶址殖蓛刹糠郑汉竺孀址牡谝粋€字符,以及這個字符之后的所有字符。然后把第一個字符逐一和它后面的字符交換。

去重的全排列就是從第一個數(shù)字起每個數(shù)分別與它后面非重復出現(xiàn)的數(shù)字交換。

以上這篇js-FCC算法-No repeats please字符串的全排列(詳解)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論