题目链接: 49. 字母异位词分组 - 力扣(LeetCode)
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
// 处理边界情况:如果输入数组为空或只有一个元素,直接返回
if (strs.length == 0 || strs.length == 1) {
return List.of(Arrays.asList(strs));
}
// 创建一个 HashMap 来存储分组结果
// 键是排序后的字符串,值是原始字符串的列表
Map<String, List<String>> map = new HashMap<>();
// 遍历输入的每个字符串
for (String s : strs) {
// 将字符串转换为字符数组
char[] chars = s.toCharArray();
// 对字符数组进行排序
Arrays.sort(chars);
// 将排序后的字符数组转换回字符串,作为 map 的键
String key = String.valueOf(chars);
// 如果 map 中还没有这个键,为它创建一个新的 ArrayList
if (!map.containsKey(key)) {
map.put(key, new ArrayList<>());
}
// 将原始字符串添加到对应的列表中
map.get(key).add(s);
}
// 返回 map 中所有值的列表
// 使用 new ArrayList<>(map.values()) 来确保返回类型是 List<List<String>>
return new ArrayList<>(map.values());
}
}
编程知识点集锦:
Arrays.asList(strs)
字符串转字符数组: char[] chars = s.toCharArray();
字符数组转换回字符串: String.valueOf(chars);
map是否含有某个key: map.containsKey(key)
map.values(): Map.values() 到 ArrayList 的转换