JSFiddle - React, Tailwind, and code Playground
by ronilan
HTML
<pre>
/**
# given a list of words, write a function which
# takes in the list, and groups the words together
# according to which ones are anagrams of eachother
# e.g.
# input = ["art", "rat", "bats", "banana", "stab", "tar"]
# output = [["art", "rat", "tar], ["bats", "stab"], ["banana"]]
*/
</pre>
JavaScript
/**
# given a list of words, write a function which
# takes in the list, and groups the words together
# according to which ones are anagrams of eachother
# e.g.
# input = ["art", "rat", "bats", "banana", "stab", "tar"]
# output = [["art", "rat", "tar], ["bats", "stab"], ["banana"]]
*/
function isAnagaram(wordA, wordB) {
var arrA = wordA.split("").sort().join(),
arrB = wordB.split("").sort().join(),
result = false;
if (arrA === arrB) {
result = true;
}
return result;
}
function groupAnagrams(wordArray) {
var i,
j,
k,
groupCount = 0,
max = wordArray.length,
skip = false,
skipIndex = [],
result = [];
//every word in array
for (i = 0; i < max; i++) {
// was it alreay matched to another?
for (k = 0; k < skipIndex.length; k++) {
if (i === skipIndex[k]) {
skip = true;
}
}
// if not
if (!skip) {
// put new word in group
result.push([]);
result[groupCount].push(wordArray[i]);
// search all words forward
for (j = i + 1; j < max; j++) {
// if anagram push and note matched word
if (isAnagaram(wordArray[i], wordArray[j])) {
result[groupCount].push(wordArray[j]);
skipIndex.push(j);
}
}
groupCount++;
}
skip = false;
}
return result;
}
var input = ["art", "rat", "bats", "banana", "stab", "tar"];
console.log(groupAnagrams(input));
var input = ["art", "fart", "mart", "tram", "rat", "bats", "banana", "stab", "tar"];
console.log(groupAnagrams(input));
var input = ["art", "fart", "mart", "tram", "aa", "aa", "rat", "bats", "banana", "stab", "tar"];
console.log(groupAnagrams(input));