思路
记录每个单词中出现的字母,存储在一个列表里,然后对该列表进行排序。
这样处理以后,字母异位词对应的列表是完全相同的,这样我们就可以维护一个哈希表,完成映射存储。
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
# 记录每个单词中包含的字母,维护一个列表到列表的映射
d = {}
for s in strs:
# 遍历单词中的字母
words = []
for c in s:
words.append(c)
words.sort()
word = ''
for w in words:
word += w
if word in d:
d[word].append(s)
else:
d[word] = [s]
res = []
for key,value in d.items():
res.append(value)
return res
Java版本
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
HashMap<String,List<String>> table = new HashMap<String, List<String>>();
for (String str : strs){
char[] array = str.toCharArray();
Arrays.sort(array);
String key = new String(array);
List<String> list = table.getOrDefault(key,new ArrayList<String>());
list.add(str);
table.put(key,list);
}
return new ArrayList<List<String>>(table.values());
}
}