【前端筆試】JavaScript實現字串全排列
阿新 • • 發佈:2019-01-09
我個人認為前端工程師筆試題中,演算法題一般不難,也就這個難度,甚至比這還要簡單。這是我在筆試過程中遇到的一個題~下面分享一下解題思路。
大體結構:定義一個方法,傳入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)), []);
};