给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。
提示:
1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i]
仅包含小写字母- 思路分析:如何是否属于字母异位词的办法就是将String数组中的所有元素进行排序,然后一样的话则说明是字母异位词。我们可以先对String数组中的所有元素进行排序,然后将排完序之后的String作为key,value位一个List,用来添加key相同的String,最后只需要遍历map把所有元素添加到resultList中即可,代码实现和提交截图如下图。
-
class Solution { public static List<List<String>> groupAnagrams(String[] strs) { HashMap<String,List<String>> map = new HashMap(); int len = strs.length; for(int i = 0 ; i < len ; i++){ String key = strs[i]; char[] ckey = key.toCharArray(); Arrays.sort(ckey); String newKey = String.valueOf(ckey); List<String> list = map.getOrDefault(newKey, new ArrayList<String>()); list.add(strs[i]); map.put(newKey,list); } List<List<String>> res = new ArrayList<>(); Set<Map.Entry<String, List<String>>> entries = map.entrySet(); Iterator<Map.Entry<String, List<String>>> iterator = entries.iterator(); while(iterator.hasNext()){ Map.Entry<String, List<String>> next = iterator.next(); res.add(next.getValue()); } return res; } }
总结:利用每个String排序后相同的办法来解决字母异位词,借用map存储进行分类,学到了。