题目链接: 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 中还没有这个键,为它创建一个新的 ArrayListif (!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 的转换