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);
    }
相关推荐
FRing037 分钟前
vue2干货总结2(v-bind、v-for、v-model、指令修饰符、v-bind操作class和style)
开发语言·前端·vue.js·vue2
by2099935 分钟前
C++ 智能指针的所有权与使用
开发语言·c++·经验分享
砚底藏山河40 分钟前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
IT召唤狮1 小时前
开源企业级零信任项目Pangolin,零信任能挡住PHP核弹漏洞吗?
开发语言·开源·php
知已难寻1 小时前
03 · OpenStack的计算管理 Nova
运维·服务器·开发语言·云原生·云计算·openstack·开源软件
Rover Ramble1 小时前
C++ 用互斥锁实现读写锁
开发语言·c++
猿究院_夏燊1 小时前
MySQL 的四种隔离级别
java·数据库·mysql
码流子2 小时前
移动收费怎么做?手持终端+App+收费中心的架构实践
java·开发语言·架构
雪落漂泊2 小时前
C++算法 滑动窗口篇(下)
开发语言·c++
霸道流氓气质2 小时前
AI 流式对话与实时聊天平台:SSE 解码竞态、有状态会话隔离与背压取消的 Vue3 + Spring AI 生产级实战
java·人工智能·spring