1. 题目

2. 思路

这道题的思路不是那么好想到。有两种解决方法:(1)暴力法;但是这种方法的复杂度还是挺高的。(2)映射法。因为是需要把由相同字母组成的单词放到一块儿,所以可以理解成相同字母的单词的key是相同的。那么怎么得到这个key呢?可以用数组记录。

3. 代码

from collections import defaultdict
class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        key = [0]*26 # 26个英文字母
        str2list = defaultdict(list)
        for s in strs:
            key = [0]*26 # 26个英文字母
            for char in s:                
                idx = ord(char) - ord('a') # 当前字符的下标
                key[idx] += 1
            key = [str(i) for i in key]
            cur_key = "_".join(key)
            # print(cur_key)
            str2list[cur_key].append(s)
        res = []
        for item in str2list.items():
            res.append(item[1])
        # print(res)
        return res