Skip to content

Instantly share code, notes, and snippets.

@lifeamit
Created April 6, 2017 02:13
Show Gist options
  • Save lifeamit/4a143533fbed03b9db0cc046e0d7fe94 to your computer and use it in GitHub Desktop.
Save lifeamit/4a143533fbed03b9db0cc046e0d7fe94 to your computer and use it in GitHub Desktop.
Program to group anagrams from a given string array
function groupAnagrams(strArr) {
var newArr = strArr.slice(0); // To avoid changes in original array
var size = newArr.length,
output = [],
i = 0,
tmp, str1, str2;
while (size) {
str1 = newArr[0];
size = removeElement(newArr, 0, size);
i = 0;
tmp = [str1];
while (size && i < size) {
str2 = newArr[i];
if (isAnagram(str1, str2)) {
tmp.push(str2);
size = removeElement(newArr, i, size);
i--;
}
i++;
}
output.push(tmp);
}
return output;
}
function removeElement(arr, i, size) {
if (size <= 1) {
return 0;
}
arr[i] = arr[size - 1];
return --size;
}
function isAnagram(str1, str2) {
if (typeof str1 !== 'string' || typeof str2 !== 'string') {
return false;
}
var map = {},
len1 = str1.length,
len2 = str2.length,
i = 0,
numOfChars = 0;
while (i < len1) {
count = map[str1[i]] || 0;
count++;
map[str1[i]] = count;
numOfChars++;
i++;
}
i = 0;
while (i < len2) {
if (!map[str2[i]]) {
return false;
}
map[str2[i]]--;
numOfChars--;
i++;
}
return numOfChars === 0;
}
var input = ["xyz", "abcd", "dcab", "zxy", "hello", "bacd"];
console.log(groupAnagrams(input));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment