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:
- For the return value, each inner list's elements must follow the lexicographic order.
- All inputs will be in lower-case.
Update (2015-08-09):
The signature of the function had been updated to return list<list<string>>
instead of list<string>
, as suggested here. If you still see your function signature return alist<string>
, please click the reload button to reset your code definition.
Subscribe to see which companies asked this question
public class Solution { public List<List<String>> groupAnagrams(String[] strs) { List<List<String>>result = new ArrayList<>(); if(strs == null || strs.length == 0) return result; //将字典序的字符串作为key,将其同位词组转到一个List中存储到HashMap中 HashMap<String,List<String>>map = new HashMap<>(); for(int i = 0; i < strs.length; i++) { char[] chars = strs[i].toCharArray(); // 字典序排序 Arrays.sort(chars); String temp = new String(chars); if (!map.containsKey(temp)) { List<String> result_list = new ArrayList<>(); result_list.add(strs[i]); map.put(temp, result_list); } else { map.get(temp).add(strs[i]); } } //遍历map,对ArrayList进行字典序排序 Iterator<Map.Entry<String,List<String>>>iterator = map.entrySet().iterator(); while(iterator.hasNext()) { Map.Entry<String,List<String>> entry = iterator.next(); List<String> temp_list = entry.getValue(); Collections.sort(temp_list); result.add(temp_list); } return result; } }
public class Solution { public List<List<String>> groupAnagrams(String[] strs) { Map<String,ArrayList<String>> map = new HashMap<String,ArrayList<String>>(); for(String str : strs){ String sortedstr = Sortstr(str); if(map.containsKey(sortedstr)){ map.get(sortedstr).add(str); } else{ map.put(sortedstr,new ArrayList<String>()); map.get(sortedstr).add(str); } } List<List<String>> result = new ArrayList<List<String>>(map.values()); for(List<String> res : result){ Collections.sort(res); } return result; } private String Sortstr(String str){ char[] char1 = str.toCharArray(); Arrays.sort(char1); return new String(char1); } }