字母异位词分组
Posted Delta
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字母异位词分组相关的知识,希望对你有一定的参考价值。
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: ["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>累的对象。
以上是关于字母异位词分组的主要内容,如果未能解决你的问题,请参考以下文章