字母异位词分组考虑顺序java_字母异位词分组

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

示例:

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

输出:

[

["ate","eat","tea"],

["nat","tan"],

["bat"]

]

说明:

所有输入均为小写字母。

不考虑答案输出的顺序。

解题思路

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

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

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

如:

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

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

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

代码如下:

public static List>group(String[] strs) {if (strs.length == 0) return new ArrayList>();

Map> 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());

map.get(key).add(str);

}return new ArrayList>(map.values());

}

补充:

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

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

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

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

故:

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

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


版权声明:本文为weixin_42495556原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。