Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
Anagrams if only if two Strings have same Characters and equal in size,
For example:
1. "catalogue" and"coagulate" are Anagrams
2. "decimate" and "medicate" are Anagrams
Key to Solve: Sort String + HashMap
1. Sort each String by alphabetic order
2. Store into HashMap(Key: String, Value: Anagrammatist)
3. Add all Anagrammatist from each Value of HashMap togther into a output List.
Check the coding in detail below:
public class Solution {
public ArrayList<String> anagrams(String[] strs) {
ArrayList<String> output=new ArrayList<String>();
HashMap<String,ArrayList<String>> map=new HashMap<String, ArrayList<String>>();
for(int i=0;i<strs.length;i++){
char[] s=strs[i].toCharArray();
Arrays.sort(s);
String ss=new String(s);
ArrayList<String> list=new ArrayList<String>();
if(!map.containsKey(ss)){ //store into HashMap if not containKey
list.add(strs[i]);
map.put(ss, list);
}else{ //if containKey
map.get(ss).add(strs[i]);
}
}
Iterator itr=map.values().iterator();
while(itr.hasNext()){
ArrayList<String> data=(ArrayList<String>)itr.next();
if(data.size()>1){ //that mean there are Anagrams Words in the list
output.addAll(data);
}
}
return output;
}
}