49.字母异位词分组

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例 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"]]

建立Map <String ,List<String>>类型的哈希表很有意思,最后直接通过map.value()方法输出了所有的结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
// 创建一个哈希表来存储分组,键是排序后的字符串,值是原字符串的列表
Map<String, List<String>> map = new HashMap<String, List<String>>();

// 遍历输入的字符串数组
for (String str : strs) {
// 将当前字符串转换成字符数组,然后对字符数组进行排序
char[] array = str.toCharArray();
Arrays.sort(array);
// 将排序后的字符数组转换回字符串,作为哈希表的键
String key = new String(array);

// 获取当前键对应的列表,如果不存在,则创建一个新列表
List<String> list = map.getOrDefault(key, new ArrayList<String>());

// 将当前原字符串添加到列表中
list.add(str);

// 将更新后的列表与其对应的键一起放回哈希表中
map.put(key, list);
}

// 返回哈希表中所有值的集合,即分组后的字符串列表
return new ArrayList<List<String>>(map.values());
}
}