leetcode49.字母异位词分组

标签:hot100,哈希表

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]

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

解释:

  • 在 strs 中没有字符串可以通过重新排列来形成 "bat"
  • 字符串 "nat""tan" 是字母异位词,因为它们可以重新排列以形成彼此。
  • 字符串 "ate""eat""tea" 是字母异位词,因为它们可以重新排列以形成彼此。

示例 2:

输入: strs = [""]

输出:[[""]]

示例 3:

输入: strs = ["a"]

输出:[["a"]]

提示:

  • 1 <= strs.length <= 104
  • 0 <= strs[i].length <= 100
  • strs[i] 仅包含小写字母

思路:map:key-排序后的字符串,value-字符串列表;时间复杂度O(nklogk);解题完毕后一定要顺便分析下时间复杂度啊,几乎每场面试都会让你分析的......

核心代码:

java 复制代码
    public List<List<String>> groupAnagrams(String[] strs) {
        List<List<String>> groupAnagrams = new ArrayList<>();
        Map<String,List<String>> map = new HashMap<>();
        for(int i = 0; i < strs.length; i++){
            char [] temp = strs[i].toCharArray();
            Arrays.sort(temp);
            String sorted_strs = new String(temp);
            List<String> lis = new ArrayList<>();
            if(map.containsKey(sorted_strs)){
                lis = map.get(sorted_strs);
            }
            lis.add(strs[i]);
            map.put(sorted_strs,lis); 
        }
        for(String key : map.keySet()){
            groupAnagrams.add(map.get(key));
        }
        return groupAnagrams;
    }

本地IDE版本:

java 复制代码
public List<List<String>> groupAnagrams(String [] strs){
       Map<String,List<String>> map = new HashMap<>();
       for(int i=0;i<strs.length;i++){
           char[] chars = strs[i].toCharArray();
           Arrays.sort(chars);
           String key = new String(chars);
           List<String> list = new ArrayList<>();
           if(map.containsKey(key)){
               list = map.get(key);
           }
           list.add(strs[i]);
           map.put(key,list);
       }
       List<List<String>> ret = new ArrayList<>();
       for(String key:map.keySet()){
           ret.add(map.get(key));
       }
       return ret;
   }

    public static void main(String[] args) {
        leetcode49 leetcode49 = new leetcode49();
        String [] strs = {"eat", "tea", "tan", "ate", "nat", "bat"};
        List<List<String>> ret = leetcode49.groupAnagrams(strs);
        System.out.println( ret);
    }
相关推荐
寻星探路5 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
lly2024066 小时前
Bootstrap 警告框
开发语言
2601_949146537 小时前
C语言语音通知接口接入教程:如何使用C语言直接调用语音预警API
c语言·开发语言
曹牧7 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
KYGALYX7 小时前
服务异步通信
开发语言·后端·微服务·ruby
zmzb01037 小时前
C++课后习题训练记录Day98
开发语言·c++
爬山算法8 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
kfyty7258 小时前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
猫头虎8 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
李少兄8 小时前
在 IntelliJ IDEA 中修改 Git 远程仓库地址
java·git·intellij-idea