zoukankan      html  css  js  c++  java
  • 字母异位词分组

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

    示例:

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

    说明:

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

    解题思路

    对于一组异位词,若对其进行字符大小排列,得到的词都是相同的。

    如["ate","eat","tea"]  对每个词按字符大小排列后得到的都是"aet"。

    故可以使用Map<String, List> 来解决本题,key是排序的词,list存贮排序后为key的词。

    如:

    key="aet",list=["ate","eat","tea"]

    key="ant",list=["nat","tan"]

    key="abt",list=["bat"]

    代码如下:

        public static List<List<String>> group(String[] strs) {
    
            if (strs.length == 0) return new ArrayList<List<String>>();
    
            Map<String, List<String>> map = new HashMap<>();
            String key;
            char[] temp;
            for (String str:strs) {
                temp = str.toCharArray();
                Arrays.sort(temp);
                key = String.valueOf(temp);
                if (!map.containsKey(key)) map.put(key, new ArrayList<String>());
                map.get(key).add(str);
            }
            return new ArrayList<List<String>>(map.values());
        }

    补充:

    List<List<String>> res = new ArrayList<ArrayList<String>>()   是错误的。

    List<Fruit>是ArrayList<Fruit>的父类(接口),List<Fruit>=new ArrayList<Fruit>()是正确的。

    但是List<Fruit>不是ArrayList<Apple>的父类,尽管Fruit是Apple的父类,List<Fruit>=new ArrayList<Apple>()是错误的。

    不过,List<Fruit>容器中可以添加Apple对象。

    故:

    List<String>是ArrayList<String>的父类(接口),List<List<String>>不是ArrayList<ArrayList<String>>的父类。

    不过res中可以添加ArrayList<String>累的对象。

  • 相关阅读:
    伯克利推出世界最快的KVS数据库Anna:秒杀Redis和Cassandra
    不要什么都学-打造自己的差异化价值
    gitlab markdown支持页面内跳转
    技术人员怎样提升对业务的理解
    为什么HDFS的副本数通常选择3?
    MySQL++简单使用记录.md
    log4cpp安装使用
    log4cxx安装使用
    epoll使用总结
    工作方法-scrum+番茄工作法
  • 原文地址:https://www.cnblogs.com/deltadeblog/p/9118973.html
Copyright © 2011-2022 走看看