zoukankan      html  css  js  c++  java
  • Leetcode题目49.字母异位词分组(中等)

    题目描述:

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

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

    说明:

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

    题目解析:

    这道题关键在于,如何找到可以唯一标识具有相同字母并且个数也一样的键,单词按字典顺序排序

    代码实现:

    import java.util.*;
    
    /**
     * @author yaoshw
     */
    public class Main {
    
        public static void main(String[] args) {
    
            String[] strings = {"eat", "tea", "tan", "ate", "nat", "bat"};
    
            groupAnagrams(strings).forEach(System.out::println);
        }
    
        public static List<List<String>> groupAnagrams(String[] strs) {
    
            if (strs == null || strs.length == 0) {
                return new ArrayList<>();
            }
            Map<String, List<String>> map = new HashMap<>(16);
            for (String str : strs) {
                char[] charStr = str.toCharArray();
                //按照字典序进行排序
                Arrays.sort(charStr);
                String key = String.valueOf(charStr);
                if (!map.containsKey(key)) {
                    map.put(key, new ArrayList<>());
                }
                //将当前字符串添加到以key为键的map集合中
                map.get(key).add(str);
            }
            return new ArrayList<>(map.values());
        }
    }

    时间复杂度:O(NKlogK),其中 N是 strs 的长度,而 K 是 strs 中字符串的最大长度。当我们遍历每个字符串时,外部循环具有的复杂度为 O(N)。然后,我们在 O(KlogK) 的时间内对每个字符串排序。

    空间复杂度:O(NK),排序存储在 map中的全部信息内容。

  • 相关阅读:
    Task级别任务调度分析---源码级
    解决部署K8S集群时flannel无法下载问题
    安装kubernetes+docker集群,一篇文章搞定
    充值-实体类+查询
    充值-controller
    多对一的增删改查-list页面,add页面,update页面,tongji页面
    多对一的增删改查-dao层
    多对一的增删改查-sql语句
    多对一的增删改查-controller
    多对一的增删改查-service和impl
  • 原文地址:https://www.cnblogs.com/ysw-go/p/11798609.html
Copyright © 2011-2022 走看看