Generates all permutations of a string (contains duplicates).
Use recursion.
For each letter in the given string, create all the partial permutations for the rest of its letters.
Use Array.map()
to combine the letter with each partial permutation, then Array.reduce()
to combine all permutations in one array.
Base cases are for string length
equal to 2
or 1
.
const stringPermutations = str => {
if (str.length <= 2) return str.length === 2 ? [str, str[1] + str[0]] : [str];
return str
.split('')
.reduce(
(acc, letter, i) =>
acc.concat(stringPermutations(str.slice(0, i) + str.slice(i + 1)).map(val => letter + val)),
[]
);
};
stringPermutations('abc'); // ['abc','acb','bac','bca','cab','cba']