题目
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母都恰好只用一次。
示例
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]
输入: strs = [""]
输出: [[""]]
输入: strs = [“a”]
输出: [[“a”]]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/group-anagrams
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法1![请添加图片描述](https://img-blog.csdnimg.cn/2900c527bd0a4cc18cde9170ba7f82b0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5Ya36YW355qE5pG46bG85bCP5bCG,size_20,color_FFFFFF,t_70,g_se,x_16)
Python实现
defaultdict()的使用
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
d=defaultdict(list)
for i in range(len(strs)):
var=sorted(list(strs[i]))
d[str(var)].append(strs[i])
return list(d.values())
Java实现1
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());
}
}
Java实现2
2021/11/11 :
还是忘记了怎么做,看了题解才想起来呜呜
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String, List<String>> map = new HashMap<>();
List<String> var = new ArrayList<>();
for (String str : strs){
char[] tmp = str.toCharArray();
//key值
Arrays.sort(tmp);
String key = new String(tmp);
//判断key值是否存在,若存在则把当前str加到value里
var = map.getOrDefault(key, new ArrayList<>());
var.add(str);
//更新map
map.put(key, var);
}
List<List<String>> res = new ArrayList<>(map.values());
return res;
}
}