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);
    }
相关推荐
初心未改HD29 分钟前
Go 泛型完全指南:从入门到实战
开发语言·golang
salipopl29 分钟前
Spring Boot 整合 Druid 并开启监控
java·spring boot·后端
西红柿炒番茄3133 分钟前
【Python】一个自动切换壁纸的python程序
开发语言·python
ShiJiuD66688899936 分钟前
JSP Cookie和Session
java·开发语言
geNE GENT40 分钟前
Spring Boot 实战篇(四):实现用户登录与注册功能
java·spring boot·后端
FQNmxDG4S9 小时前
Java多线程编程:Thread与Runnable的并发控制
java·开发语言
前端老石人9 小时前
HTML 字符引用完全指南
开发语言·前端·html
matlab_xiaowang10 小时前
Redux 入门:JavaScript 可预测状态管理库
开发语言·javascript·其他·ecmascript
虹科网络安全10 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
axng pmje10 小时前
Java语法进阶
java·开发语言·jvm