49. 字母异位词分组

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

字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母都恰好只用一次。

示例 1:

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

输入: strs = [""]
输出: [[""]]
示例 3:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/group-anagrams
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路及方法

这题挺难的,我之前用的方法会动态改变数组,不适用。所以换了一种方法,如下所示。使用哈希来记录每一个异位词,key值是该异位词的正确排序,value记录该排序的所有词。

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        HashMap<String, List<String>> hashMap = new HashMap<>();
        for (String str : strs) {
            char[] tmpArr = str.toCharArray();
            Arrays.sort(tmpArr);
            // 设置key值
            String key = new String(tmpArr);
            // 存储字母异位词
            List<String> tmpList = new ArrayList<>();
            if (hashMap.containsKey(key)) {
                tmpList = hashMap.get(key);
            } else {
                hashMap.put(key, new ArrayList<>());
            }
            tmpList.add(str);
            hashMap.put(key, tmpList);
        }
        return new ArrayList<List<String>>(hashMap.values());
    }
}
···
结果如下:

![](https://upload-images.jianshu.io/upload_images/6573960-2819414b19c84b37.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。 示例: 输入: ["eat...
    滨岩阅读 3,003评论 0 0
  • 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。 示例: 输入: ["eat...
    huxq_coder阅读 1,274评论 0 1
  • 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。 示例: 输入: ["eat...
    雪上霜阅读 864评论 0 0
  • 题目描述: 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。 示例: 输入:...
    夜空中最亮的星_6c64阅读 2,578评论 0 0
  • 刚看到题的想法就是用一个vector存储每个字符串字母与出现次数的哈希映射;哈希映射统计每个字符串中每个字母出现的...
    Bella_Luna阅读 1,170评论 0 0