Files
30-seconds-of-code/snippets/anagrams-of-string-(with-duplicates).md
Jussi Saurio f0982a01a3 Make 'Anagrams of string' fully functional
Gets rid of mutable `.push` (and param reassignment) inside `.map`
2017-12-12 22:23:44 +02:00

665 B

Anagrams of string (with duplicates)

Use recursion. For each letter in the given string, create all the partial anagrams for the rest of its letters. Use map() to combine the letter with each partial anagram, then reduce() to combine all anagrams in one array. Base cases are for string length equal to 2 or 1.

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