「优选算法刷题」:字母异位词分组

27 阅读1分钟

一、题目

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

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

示例 1:

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

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

示例 2:

输入: strs = [""]

输出: [[""]]

示例 3:

输入: strs = ["a"]

输出: [["a"]]

二、思路解析

这道题还是属于哈希表的一类,罗根我最近就在刷这个专题,所以看到一些不错的题都会写成博客分享出来哦。

这道题的解题思路是利用哈希表来分组,同一组内都两两互为字母异位词。

具体步骤如下:

  1. 遍历字符串数组 strs,对于每个字符串,将其转换为字符数组并进行排序,得到排好序的字符串作为当前单词的 key。
  2. 利用一个 HashMap 存储 key 和对应的字母异位词列表。
  3. 遍历完所有单词后,将 HashMap 中的值(即字母异位词列表)转换为 List 返回即可。

并且我用的哈希表参数是 String 和 String 数组。String 用来表示一组具有相同字母组成的异位词的排序后的字符串,String 数组表示具有相同字母组成的异位词的集合。

三、完整代码

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List<String>> hash = new HashMap<>();

        for(String s : strs){
            char[] tmp = s.toCharArray();
            Arrays.sort(tmp);
            String key = new String(tmp);

            if(!hash.containsKey(key)){
                hash.put(key, new ArrayList());
            }
            hash.get(key).add(s); 
        }
        return new ArrayList(hash.values());
    }
}

以上就是本篇博客的全部内容啦,如有不足之处,还请各位指出,期待能和各位一起进步!