LeetCode 49.字母异位词分组

本文介绍了如何通过哈希表来解决将字母异位词组合在一起的问题。核心思路是将字符串按字典序排序后作为哈希表的键,键对应的值是一个列表,用于存储所有与键相匹配的异位词。遍历字符串数组,对每个字符串进行排序并检查是否已存在于哈希表中,最后返回所有异位词组合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串

思路:

  • 我们可以开辟一个哈希表map空间,由于两个异位词按照字典序排序之后一定是相同的,因此我们可以用键key存放字符串按照字典序升序排好之后的String类型的值,而值value存放一个list集合,集合中存放的是当前key的所有异位词字符串
  • 遍历字符串数组的时候,首先判断该字符串按照字典序排序之后的值在map中有没有对应的值list集合,没有就创建一个,遍历结束不要忘记把当前字符串s存入list集合中

以下为代码+注释:

	public List<List<String>> groupAnagrams(String[] strs) {
        // key存储升序排序后的字符串,value存储所有异位词
        Map<String, List<String>> map = new HashMap<>();
        for(String s : strs){
            // 将当前字符串取出,按照字典序排序,为了找出它所对应的key值
            char[] arr = s.toCharArray();
            Arrays.sort(arr);
            // 将该字符串排序之后的值作为key值
            String key = new String(arr);
            // 取出该key值在map集合中所对应的list集合
            List<String> list = map.getOrDefault(key, new ArrayList<String>());
            // 将该字符串加入到list集合中
            list.add(s);
            // 更新map中当前key所对应的值集合list
            map.put(key, list);
        }
        return new ArrayList<List<String>>(map.values());
    }

笔者也在不断学习,如有错误,欢迎指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值