给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: ["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累的对象。