给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母都恰好只用一次。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [["a"]]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/group-anagrams
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路及方法
这题挺难的,我之前用的方法会动态改变数组,不适用。所以换了一种方法,如下所示。使用哈希来记录每一个异位词,key值是该异位词的正确排序,value记录该排序的所有词。
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
HashMap<String, List<String>> hashMap = new HashMap<>();
for (String str : strs) {
char[] tmpArr = str.toCharArray();
Arrays.sort(tmpArr);
// 设置key值
String key = new String(tmpArr);
// 存储字母异位词
List<String> tmpList = new ArrayList<>();
if (hashMap.containsKey(key)) {
tmpList = hashMap.get(key);
} else {
hashMap.put(key, new ArrayList<>());
}
tmpList.add(str);
hashMap.put(key, tmpList);
}
return new ArrayList<List<String>>(hashMap.values());
}
}
···
结果如下:
