leetcode49. 字母异位词分组

该博客主要介绍了两种方法来实现字母异位词的分组。第一种是通过排序字符串中的字符并用作哈希表的key值,第二种是使用长度为26的计数数组,然后将计数结果转换为字符串作为key。这两种方法都利用了哈希表来高效地组织字母异位词,确保相同字母异位词被分在同一组。博客内容详细展示了Java代码实现,并适用于字符串数组处理。

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

1.题目描述:

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

2.字符串排序后作为哈希表的key值:

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List> map = new HashMap<>();
        for (String s : strs) {
            char[] chars = s.toCharArray();
            Arrays.sort(chars);//字符数组排序后作为key值
            String key = new String(chars);
            if (!map.containsKey(key)) map.put(key, new ArrayList());
            map.get(key).add(s);
        }
        return new ArrayList(map.values());
    }
}

3.使用两次哈希表:一次计数,一次存放

leetcode242. 有效的字母异位词一样的思路使用长度为26的int数组计数,但是计数的结果需要拼接成字符串类型的key值放入哈希表中。

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List> map = new HashMap<>();
        for (String s : strs) {
            int[] arr = new int[26];
            for (int i = 0; i < s.length(); i++) {
                arr[s.charAt(i) - 'a']++;
            }
            StringBuilder key1 = new StringBuilder();
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] != 0) {
                    key1.append((char)(i + 'a'));
                    key1.append(arr[i]);
                }
            }
            String key = new String(key1);
            if (!map.containsKey(key)) map.put(new String(key), new ArrayList());
            map.get(key).add(s); 
        }
        return new ArrayList(map.values());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值