Problem:
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
Method:
Create a HashMap:
key: String (after chars are sorted);
value: The specific corresponding string.
Then, iterate through the HashMap. If there is a key with more than two values, we add them into the result container.
Code:
public class Solution { public ArrayList<String> anagrams(String[] strs) { if (strs == null || strs.length == 0) return null; ArrayList<String> res = new ArrayList<String>(); HashMap<String, ArrayList<String>> dict = new HashMap<String, ArrayList<String>>(); for (int i = 0; i < strs.length; i++){ char[] c = strs[i].toCharArray(); Arrays.sort(c); String s = new String(c); if (dict.containsKey(s)){ dict.get(s).add(strs[i]); }else{ ArrayList<String> l = new ArrayList<String>(); l.add(strs[i]); dict.put(s,l); } } Iterator iter = dict.values().iterator(); while(iter.hasNext()){ ArrayList<String> temp = (ArrayList<String>)iter.next(); //cast type!! if(temp.size() > 1){ res.addAll(temp); } } return res; } }