LeetCode49. 字母异位词分组 JAVA

本文介绍了一种有效的算法,用于解决字符串数组中的字母异位词分组问题。通过使用哈希表存储排序后的字符串作为键,实现快速查找与分组。文章详细解释了算法流程,包括字符串排序的方法。

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

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

示例:

输入: ["eat", "tea", "tan", "ate", "nat", "bat"]
输出:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]
说明:

所有输入均为小写字母。
不考虑答案输出的顺序。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/group-anagrams
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解:
1、利用map来记录异位词所属的list
2、对每一个字符串进行排序,排序后的结果记录进map的key值
如果map中有该key值,则字符串加入该key值对应的value中list;
如果map中没有该key值,新建一个list,并将字符串和list的映射添加进map中。
3、注意字符串排序方法

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String,List<String>> map=new HashMap<>();
        List<List<String>> res=new ArrayList<>();
        for(String s:strs)
        {
            String tmp=sort(s);
          //  Arrays.sort(tmp);
            if(map.containsKey(tmp))
            {
                map.get(tmp).add(s);
            }
            else
            {
                List<String> list=new ArrayList<>();
                list.add(s);
                res.add(list);
                map.put(tmp,list);
            }
        }
        return res;
    }
     public static String sort(String str){
         //利用toCharArray可将字符串转换为char型的数组
         char[] s1 = str.toCharArray();
         for(int i=0;i<s1.length;i++){
             for(int j=0;j<i;j++){
                 if(s1[i]<s1[j]){
                     char temp = s1[i];
                     s1[i] = s1[j];
                     s1[j] = temp;
                 }
             }
         }
         //再次将字符数组转换为字符串,也可以直接利用String.valueOf(s1)转换
         String st = new String(s1);
         return st;
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值