LeetCode Hot 100 No.49 字母异位词分组

本文介绍了如何使用哈希表和字符数组排序来高效地将输入的字符串数组分组为字母异位词集合。通过排序字符并生成唯一标识,解决了多对一的字符串映射问题。

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

在这里插入图片描述
思路:
这道题也考虑用哈希表来做,但是没想到字符数组可以排序。
字符串转为字符数组以后,是可以进行排序的,排完序的字符数组又可以重新生成一个字符串。这样,字母相同,排列不同的字符串都可以对应同一个排序后的字符串。如:“eat”, “tea”, “ate” 都对应着同一个排序字符串“aet”。我们就把这个排序字符串当作哈希表的键,将这个排序字符串所对应的一系列字母异位词组成的列表作为键值。每次遍历到一个字符串,我们先生成它对应的排序字符串,然后将这个字符串通过哈希表,放入对应的列表中。

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        HashMap<String, List<String>> map = new HashMap<>();
        for(int i=0;i<strs.length;i++)
        {
            char[] c = strs[i].toCharArray();
            Arrays.sort(c);
            String s = new String(c);
            List<String> list = map.getOrDefault(s,new ArrayList<>());
            list.add(strs[i]);
            map.put(s,list);
        }
        return new ArrayList<List<String>>(map.values());
    }
}

总的来说,就是要让字母异位词都对应同一个键。是一种多对一的思想。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值