描述
Given an array of strings, group anagrams together.
Example:
1 2 3 4 5 6 7
| Input: ["eat", "tea", "tan", "ate", "nat", "bat"], Output: [ ["ate","eat","tea"], ["nat","tan"], ["bat"] ]
|
Note:
- All inputs will be in lowercase.
- The order of your output does not matter.
分析
因为给定的是 String 的列表,首先将每个 String 转换为 char[] 类型,进行排序,存入 HashMap 中,key 是排序后的 String,value 存原始的 String,对于具有 anagrams 结构的单词,排序后的结果是相同的,所以最后将 HashMap 中的 value 值一个个放入列表中返回即可。
解决方案1(Java)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| class Solution { public List<List<String>> groupAnagrams(String[] strs) { List<List<String>> result = new ArrayList<List<String>>(); HashMap<String, ArrayList<String>> sortUnSortWordMap = new HashMap<String, ArrayList<String>>(); for (int i = 0; i < strs.length; i++) { String current = strs[i]; char[] currentCharArray = current.toCharArray(); Arrays.sort(currentCharArray); String sortedString = new String(currentCharArray); if (!sortUnSortWordMap.containsKey(sortedString)) { sortUnSortWordMap.put(sortedString, new ArrayList<String>()); } sortUnSortWordMap.get(sortedString).add(current); } for (String key: sortUnSortWordMap.keySet()) { result.add(sortUnSortWordMap.get(key)); } return result; } }
|
相关问题