DEV Community

Discussion on: Algorithm 202 (My Interview Question): Grouping Anagrams in 3 Ways

Collapse
 
rebusweb profile image
Wojciech Rebis

Great article, and good interview question.
Good work, keep it up! :)

Just wanted to share my approach to this:

function groupAnagrams(anagrams) {
  const wordGroups = anagrams.reduce((groups, anagram) => {
    const word = anagram.split('').sort().join('');
    if (groups[word]) {
      groups[word].push(anagram);
    } else {
      groups[word] = [anagram];
    }
    return groups;
  }, {});

  return Object.values(wordGroups).map(group => group);
} 
Enter fullscreen mode Exit fullscreen mode

What do you think about it?

Collapse
 
ebereplenty profile image
NJOKU SAMSON EBERE

Thank you Wojciech. I love your method. It's very clever and coincise. Works perfectly too.

dev-to-uploads.s3.amazonaws.com/i/...

Do you mind explaining what is going on in the reduce() function probably by commenting the code?

Collapse
 
rebusweb profile image
Wojciech Rebis

I thought of reducing array of anagrams to an object which keys will be initial words and values arrays of anagrams from these words.

Thread Thread
 
ganeshshetty195 profile image
Ganesh Shetty

Tried pretty much in the same way

function groupAnagrams(array) {
var reducedObject = array.reduce((acc, cur) => {
var newcur=cur.split('').sort().join('');
if (!acc[newcur]) {
acc[newcur] = [cur]
} else {
acc[newcur] = [...acc[newcur], cur]
}
return acc;
}, {});
return Object.values(reducedObject);
}
console.log(groupAnagrams(["eat", "tea", "tan", "ate", "nat", "bat"]));