/给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: ["eat", "tea", "tan", "ate", "nat", "bat"]
输出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
说明:
所有输入均为小写字母。
不考虑答案输出的顺序。
思路:先给每个字符串里面的字符排序筛选出字母相同的异位词,然后通过HashMap储存排序后的
这个Key以及一个列表用来储存这些相同字母构成的字符串,最后遍历Key来获取所有的列表。
1 import java.lang.reflect.Array;
2 import java.security.Key;
3 import java.util.ArrayList;
4 import java.util.Arrays;
5 import java.util.HashMap;
6 import java.util.List;
7
8 public class test3 {
9 public List<List<String>> groupAnagrams(String[] strs) {
10 HashMap<String, List<String>> hm=new HashMap<>();
11 List<List<String>> l=new ArrayList<>();
12 for (String s:strs){
13 //字符串转换为字符数据方便排序后比较是否为异位词
14 char []c=s.toCharArray();
15 //字符数组排序
16 Arrays.sort(c);
17 //排序后转换为字符串
18 String Keystr=String.valueOf(c);
19 //如果hm里面没有Keystr这个键就put进去,并且在这个键对应的数组里面加入原始字符串s
20 if(!hm.containsKey(Keystr)){
21 hm.put(Keystr,new ArrayList<>());
22 hm.get(Keystr).add(s);
23 }
24 //如果hm里面已经有了Keystr这个键就直接在这个键对应的数组里面加入原始字符串s
25 else {
26 hm.get(Keystr).add(s);
27 }
28 }
29 //遍历键集合,把里面所有的value都存入l列表里
30 for(String Key:hm.keySet()){
31 l.add(hm.get(Key));
32 }
33 return l;
34
35 }
36 }