leetcode热题HOT 49. 字母异位词分组

问题描述:49. 字母异位词分组

给你一个字符串数组,请你将字母异位词组合在一起。可以按任意顺序返回结果列表。
字母异位词是由重新排列源单词的所有字母得到的一个新单词。

解题思路:

分析:字母异位词就是相同的字母按不同顺序组成的字符串,重点是如何判断字母异位词?

  1. 字母异位词是由相同的字母组成的。当需要查询元素是否出现过或元素是否在集合里时,首先考虑哈希法。
  2. 对于每个字符串,我们将其转换为字符数组,并对字符数组进行排序。然后,将排序后的字符数组转换回字符串,并将该字符串作为键存储在哈希表中。该键对应的值是一个列表,用于存储与该键对应的所有字母异位词。如果该键不存在,则创建一个新的列表并将其与该键关联起来;否则,直接从哈希表中获取该键对应的列表。
  3. 最后,我们将哈希表中的值转换为一个列表,并返回该列表作为结果。

整个过程可以通过以下几个步骤来概括:

  1. 创建一个空的哈希表 map。
  2. 遍历给定的字符串数组 strs,对于每个字符串 str:
  • 将字符串 str 转换为字符数组 c。
  • 对字符数组 c 进行排序。
  • 将排序后的字符数组转换回字符串 key。
  • 如果哈希表 map 中不包含键 key,则创建一个新的列表 list 并将其与键 key 关联;否则,直接从哈希表中获取键 key 对应的列表 list。
  • 将字符串 str 添加到列表 list 中。
  1. 将哈希表 map 中的值转换为一个列表,并返回该列表作为结果。

代码示例:

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        HashMap<String, List<String>> map = new HashMap<>();
        //key用来存放排序过的字符串,list存放key对应的字母异位词
        for(String str : strs){
            char[] c = str.toCharArray();//转换为字符数组
            Arrays.sort(c);//排序
            String key = String.valueOf(c);//将排序后的字符数组转换回字符串,用于后续查找
            List<String> list;
            if(!map.containsKey(key)) list = new ArrayList<>();//不存在该key值,没有找到字母异位词,新建一个list
            else list = map.get(key);//如果存在该key值,返回value
            //可以用一句代码来实现 list = map.getOrDefalut(key, new ArrayList<>());
            list.add(str);
            map.put(key, list);
        }
        return new ArrayList<List<String>>(map.values());
    }
}

补充与总结:

补充一点map的用法:

  1. map.getOrDefalut(key, new ArrayList<>());
  • map.getOrDefault(key, default) 是 Java 中 Map 接口提供的方法,用于获取指定键对应的值。如果该键存在,则返回与之关联的值;如果该键不存在,则返回指定的默认值。
  • 在这个例子中,map.getOrDefault(key, new ArrayList<>()) 的作用是:
    如果哈希表 map 中存在键 key,则返回与之关联的值(即存放字母异位词的列表)。
    如果哈希表 map 中不存在键 key,则返回一个新建的空列表 new ArrayList<>() 作为默认值。
  1. new ArrayList<List>(map.values())
  • 该句的作用是将哈希表 map 中所有的值(即存放字母异位词的列表)提取出来,并存储到一个新的 ArrayList 中,作为返回结果。
  • 首先,map.values() 返回一个包含所有值的 Collection 视图。其次我们使用 ArrayList 的构造函数来创建一个新的 ArrayList,并将 map.values() 返回的 Collection 视图作为参数传递进去。这样就会创建一个包含 HashMap 中所有值的新的 ArrayList 对象。
  • 可以先做一下leetcode 242. 有效的字母异位词.
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值