1. 程式人生 > >【前端筆試】JavaScript實現字串全排列

【前端筆試】JavaScript實現字串全排列

我個人認為前端工程師筆試題中,演算法題一般不難,也就這個難度,甚至比這還要簡單。這是我在筆試過程中遇到的一個題~下面分享一下解題思路。

大體結構:定義一個方法,傳入str變數,返回一個數組,包含所有排列:

function fun(str){
    var result = [];
    return result;
}

主要邏輯:肯定是需要遞迴的~先將第一個字母取出,然後將剩下的字串全排列。將這個字母,依次插入到每個排列所有縫隙。
如:abc進行全排列,取出a,得到全排列bc和cb,先向bc插,可以得到abc,bac,bca;再向cb插,得到acb,cab,cba;

if
(str.length == 1 || str.length == 0 ){ result.push(str); return result; }else{ var one = str.substr(0,1); var left = str.substr(1); var leftResult = fun(left); for(i=0;i<leftResult.length;i++){ for(j=0;j<leftResult[i].length+1;j++){//1的目的是讓字元one也可以插入到最後一個位置 result.push
(leftResult[i].slice(0,j) + one + leftResult[i].slice(j)); } } }

這樣就能實現字串的全排列啦~

思路有了,可以用陣列的迭代方法來實現

const anagrams = str => {
  if (str.length <= 2) return str.length === 2 ? [str, str[1] + str[0]] : [str];
  return str.split('').reduce((acc, letter, i) =>
    acc.concat(anagrams(str.slice(0
, i) + str.slice(i + 1)).map(val => letter + val)), [])
; };