Given an array of strings, group anagrams together.
For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"]
,
Return:
[ ["ate", "eat","tea"], ["nat","tan"], ["bat"] ]
Note: All inputs will be in lower-case
這一題我是這麼想的,將每個字符串排好序後,作爲Hashmap的Key,排序之前的字符串作爲value,最後將所有的value放入一個List裏即可
代碼如下:
public List<List<String>> groupAnagrams(String[] strs) {
Map<String,List<String>> map = new HashMap<String, List<String>>();
for(String str : strs){
char[] ch = str.toCharArray();
Arrays.sort(ch);
String temp = (new String(ch));
if(map.containsKey(temp)){
map.get(temp).add(str);
}else{
List<String> list = new ArrayList<String>();
list.add(str);
map.put(temp, list);
}
}
Iterator<Map.Entry<String, List<String>>> iter = map.entrySet().iterator();
List<List<String>> result = new ArrayList<List<String>>();
while(iter.hasNext()){
Map.Entry<String, List<String>> entry = (Map.Entry<String, List<String>>)iter.next();
// System.out.println(entry.getValue());
result.add(entry.getValue());
}
return result;
}
不過我在discuss裏看到一種超快的解法,很巧妙,連接是https://discuss.leetcode.com/topic/45639/java-beat-100-use-prime-number