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>累的对象。

  • 相关阅读:
    SQL SERVER数据库索引(学习笔记)
    下载word文档
    Asp.net MVC 3+ Jquery UI Autocomplete实现百度效果
    利用C#实现分布式数据库查询
    SQL2005 存储过程通用分页
    发送电子邮件
    查看索引碎片,并生成重建索引代码
    数学趣题——哥德巴赫猜想的近似证明
    数学趣题——判断回文数字
    数学趣题——填数字游戏
  • 原文地址:https://www.cnblogs.com/deltadeblog/p/9118973.html
Copyright © 2011-2022 走看看