Skip to content

Instantly share code, notes, and snippets.

@hrishikesh-mishra
Created August 19, 2017 16:00
Show Gist options
  • Save hrishikesh-mishra/2e3d1b5e04bfe21c4dae0bddc690ed65 to your computer and use it in GitHub Desktop.
Save hrishikesh-mishra/2e3d1b5e04bfe21c4dae0bddc690ed65 to your computer and use it in GitHub Desktop.
Given an array of strings, group anagrams together.
package com.hrishikeshmishra.practices.string;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.hrishikeshmishra.practices.string.GroupAnagrams.getGroup;
/**
* Problem
* Group Anagrams
* Given an array of strings, group anagrams together.
*
* @author hrishikesh.mishra
* @link http://hrishikeshmishra.com/group-anagrams/
*/
public class GroupAnagrams {
public static List<List<String>> getGroup(String[] array) {
/** Group Anagrams **/
List<List<String>> result = new ArrayList<>();
/** Group by Anagrams **/
Map<String, List<String>> groups = new HashMap<>();
/** Iterate all array element one by one**/
for (String element : array) {
/**
* Convert element to unique key that will be same for all anagrams
*/
String key = convertToUniqueString(element);
/** Check key is present in map or not **/
if (groups.containsKey(key)) {
groups.get(key).add(element);
} else {
List<String> list = new ArrayList<>();
list.add(element);
groups.put(key, list);
}
}
result.addAll(groups.values());
return result;
}
public static String convertToUniqueString(String str) {
char[] chars = new char[26];
for (char c : str.toCharArray()) {
chars[c - 'a']++;
}
return new String(chars);
}
}
class GroupAnagramsTest {
public static void main(String[] args) {
String[] array = {"eat", "tea", "tan", "ate", "nat", "bat"};
System.out.printf("Array : %s, Group: %s\n ", Arrays.toString(array), getGroup(array));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment