一、题目
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [["a"]]
二、思路解析
这道题还是属于哈希表的一类,罗根我最近就在刷这个专题,所以看到一些不错的题都会写成博客分享出来哦。
这道题的解题思路是利用哈希表来分组,同一组内都两两互为字母异位词。
具体步骤如下:
- 遍历字符串数组
strs
,对于每个字符串,将其转换为字符数组并进行排序,得到排好序的字符串作为当前单词的 key。 - 利用一个 HashMap 存储 key 和对应的字母异位词列表。
- 遍历完所有单词后,将 HashMap 中的值(即字母异位词列表)转换为 List 返回即可。
并且我用的哈希表参数是 String 和 String 数组。String 用来表示一组具有相同字母组成的异位词的排序后的字符串,String 数组表示具有相同字母组成的异位词的集合。
三、完整代码
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String, List<String>> hash = new HashMap<>();
for(String s : strs){
char[] tmp = s.toCharArray();
Arrays.sort(tmp);
String key = new String(tmp);
if(!hash.containsKey(key)){
hash.put(key, new ArrayList());
}
hash.get(key).add(s);
}
return new ArrayList(hash.values());
}
}
以上就是本篇博客的全部内容啦,如有不足之处,还请各位指出,期待能和各位一起进步!