DEV Community

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

NJOKU SAMSON EBERE on March 23, 2020

Last year, I had a technical interview and one of the questions was on Anagrams. I solved the problem in 3 ways today and I want to share it with y...
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"]));

Collapse
 
brunooliveira profile image
Bruno Oliveira

Nice! :)

Collapse
 
ebereplenty profile image
NJOKU SAMSON EBERE

Bruno, Thank you for taking your time to read through!