字母异位词分组

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

示例:

输入: ["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 }

 

posted @ 2020-10-08 21:17  妙弋  阅读(236)  评论(0)    收藏  举报