给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/group-anagrams
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:

首先明白什么是哈希,哈希就是字典,字典就是键和值。

字母异位的条件是,排序后相同。即用键中,组成不同的情况作为值。

python3代码:

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        '''
        # 字符串长度相同分第一次
        # 第一次分出来的内容,每一个元素的出现次数相同分第二次
        temp_cut = {}
        for i in strs:
            if len(temp_cut) == 0:
                temp_cut[len(i)] = [i]
            else:
                if len(i) in list(temp_cut.keys()):
                    temp_cut[len(i)].append(i)
                else:
                    temp_cut[len(i)] = [i]

        # 第一次分好了,得到temp_cut,然后对出现次数相同的进行第二次拆分
        # 这时为了区分是不是字母异位词要进行count了
        count_list = []
        print("temp_cut.values:", temp_cut.values())
        for i in temp_cut.values():
            if len(i) >= 2:
                for elem in i:
                    i_convert = list(elem)
                    for k in i_convert:
                        count_list.append({k:i_convert.count(k)})
        # TODO:三次for循环肯定不行,优化一下
        # TODO:另外思路要顺着统计个数写
        print(count_list)        
        '''
        maps = {}
        for elem in strs:
            key = "".join(sorted(list(elem)))
            if key in maps:
                maps[key].append(elem)
            else:
                maps[key] = [elem]
        return list(maps.values())
                
LeeCode 49.字母异位分组插图

作者 admin

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注