题目
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母都恰好只用一次。
解题思路
对所有的单词排序后,就能很容易判断是否为 字母异位词 ,构建 map
添加元素即可。看评论说有人用质数表示每个字母,再对所有单词求积,那么每种 字母异位词 值都相同,不同的 字母异位词 值都不同,这样可以省去排序的时间,orz,太强了。
代码
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String, List<String>> map = new HashMap<>();
List<List<String>> ans = new ArrayList<>();
for (String str : strs) {
char[] strArray = str.toCharArray();
Arrays.sort(strArray);
String arrayStr = Arrays.toString(strArray);
if (!map.containsKey(arrayStr)) {
map.put(arrayStr, new ArrayList<>());
}
map.get(arrayStr).add(str);
}
Iterator iterator = map.values().iterator();
while (iterator.hasNext()) {
ans.add((List<String>) iterator.next());
}
return ans;
}
}