题目描述
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。
示例 1:
1 2
| 输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"] 输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
|
示例 2:
1 2
| 输入: strs = [""] 输出: [[""]]
|
示例 3:
1 2
| 输入: strs = ["a"] 输出: [["a"]]
|
提示:
1 <= strs.length <= 10^4
0 <= strs[i].length <= 100
strs[i]
仅包含小写字母
解法
- 哈希表,模式识别
- 对单个单词按照字典序进行排序后字母异位词排序的结果是一样的
- 用一样的字典序排序作为键,能得到同样字典序的字母异位词作值放在list集合中
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) { Map<String,List<String>> map=new HashMap<>(); for (String str : strs) { char[] charArray=str.toCharArray(); Arrays.sort(charArray); String key=new String(charArray); if (map.containsKey(key)){ List<String> list = map.get(key); list.add(str); map.put(key, list); }else { List<String> list=new ArrayList<>(); list.add(str); map.put(key, list); } } return new ArrayList<List<String>>(map.values()); } }
|
来源:力扣(LeetCode)
链接:49. 字母异位词分组 - 力扣(LeetCode)