把一個字元串中的字元重新排列生成新的字元串,返回新生成的字元串里沒有連續重覆字元的字元串個數.連續重覆只以單個字元為準 例如, aab 應該返回 2 因為它總共有6中排列 (aab, aab, aba, aba, baa, baa), 但是只有兩個 (aba and aba)沒有連續重覆的字元 (在 ...
把一個字元串中的字元重新排列生成新的字元串,返回新生成的字元串里沒有連續重覆字元的字元串個數.連續重覆只以單個字元為準
例如, 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 arr = str.split(""); var newArr = []; var ne = []; var ex = /(.)\1+/g; function per(arr, n, aL){ if(n == aL-1){ newArr.push(arr.join("")); }else{ for(var i = n; i < aL; i++){ var tmp = arr[i]; arr[i] = arr[n]; arr[n]= tmp; per(arr, n+1, aL); tmp = arr[i]; arr[i] = arr[n]; arr[n]= tmp; } } return newArr; } var p = per(arr, 0, arr.length); for(var j = 0; j <p.length; j++){ if(!p[j].match(ex)){ ne.push(p[j]); } } // return ne.length; } permAlone('abcd');