2.字母异位词分组

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

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

示例1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

示例2:

输入: strs = [""]
输出: [[""]]

示例3:

输入: strs = ["a"]
输出: [["a"]]

提示:

  • 1 <= strs.length <= 104
  • 0 <= strs[i].length <= 100
  • strs[i] 仅包含小写字母

代码:

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        //创建哈希表,键是排序后的字符串,值是异位词列表
        Map<String,List<String>> mp = new HashMap<>();
        //遍历每一个字符串
        for(int i = 0;i < strs.length;i++){
            //将字符串转换为字符数组并排序
            char[] str = strs[i].toCharArray();
            Arrays.sort(str);
            //将排序后的字符数组转回字符串
            String key = new String(str);
            //将排序后的字符串作为键,原始字符串添加到对应的列表中
            //如果不存在排序后的字符串的键,则新建一个空列表
            List<String> list = mp.getOrDefault(key,new ArrayList<String>());
            list.add(strs[i]);
            //添加异位词到列表中
            mp.put(key,list);
        }
        //返回哈希表中的所有值,即为所有的异位词分组
        return new ArrayList<List<String>>(mp.values());
    }
}
posted @ 2025-03-11 21:48  回忆、少年  阅读(32)  评论(0)    收藏  举报