面试题 10.02. 变位词组

变位词是指字母相同,但排列不同的字符串。

方法一:

面试题 10.02. 变位词组_List

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        if not strs:return []
        strs.sort(key=len) # 按长度排序
        res=[[strs[0]]]
        for s in strs[1:]:
            ss = sorted(s)
            
            for m in res[::-1]: # 从最长串开始
                if len(m[0])!=len(s):
                    res.append([s])  
                    break            
                if ss == sorted(m[0]):
                    m.append(s)
                    break
            else:# 大小相同,但不是变位词组
                res.append([s])

        return res

方法二:

使用哈希表存储每一组变位词,哈希表的键为一组变位词的标志(字母相同),哈希表的值为一组变位词列表。

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        # mp = collections.defaultdict(list)
        mp = {}

        for st in strs:
            key = "".join(sorted(st))
            if key not in mp: # 字典不存在的 key 处理
                mp[key] = []
            mp[key].append(st)
        
        return list(mp.values())