【LeetCode-中等】49. 字母异位词分组(详解)

题目

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

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


题目地址:https://leetcode.cn/problems/group-anagrams
【LeetCode-中等】49. 字母异位词分组(详解)_第1张图片

 方法1:排序+哈希表

作者:力扣官方

思路

因为每一组字母异位词的字母,将它转换成字符数组,再排序之后都是一样的,例如“eat”排序之后是“aet”,“tea”排序之后也是“aet”,所以把他们放到一组。

因此,我们建立一个哈希表,key值存放排序数组,value存放一个list。

遍历数组strs,将每个str进行排序之后与判断哈希表中有没有这样的key,有就将它添加到那个key的value里面,没有就新建一个。

class Solution {
    public List> groupAnagrams(String[] strs) {
        Map> map = new HashMap>();
        for (String str : strs) {//遍历strs中的每一个元素:str
            char[] array = str.toCharArray();//将str字符串转换成 char的字符数组
            Arrays.sort(array);//将字符数组排序
            String key = new String(array);//将排序好的字符数组转换成字符串类型,赋值给 哈希表的key
            List list = map.getOrDefault(key, new ArrayList());//如果哈希表中有这个key,就将它的value赋值给list,否则赋值给list一个空
            list.add(str);
            map.put(key, list);
        }
        return new ArrayList>(map.values());
    }
}

例如示例1的全部执行完之后的哈希表

【LeetCode-中等】49. 字母异位词分组(详解)_第2张图片

 效果

【LeetCode-中等】49. 字母异位词分组(详解)_第3张图片

 学习到了哈希表的一个方法:

map.getOrDefault(key, new ArrayList())
//如果有这个key就得到value,反之就执行后面的语句

你可能感兴趣的:(LeetCode刷题,leetcode,算法,职场和发展)