思路:
注意到,如果把 aab,aba,baa按照字母从小到大排序,我们可以得到同一个字符串 aab。而对于每种字母出现次数不同于 aab的字符串,例如 abb和 bab,排序后为 abb,不等于 aab。所以当且仅当两个字符串排序后一样,这两个字符串才能分到同一组。根据这一点,我们可以用哈希表来分组,把排序后的字符串当作 key,原字符串组成的列表(即答案)当作 value。最后把所有 value 加到一个列表中返回。
代码如下:
from typing import List
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
if not strs:
return []
elif len(strs) == 1:
return [strs]
hash_map = {}
for s in strs:
sorted_s = ''.join(sorted(s))
if sorted_s in hash_map:
hash_map[sorted_s].append(s)
else:
hash_map[sorted_s] = [s]
result = []
for key in hash_map:
result.append(hash_map[key])
return result