Python算法题集_字母异位词分组

本文介绍了三种Python方法解决字母异位词分组问题:利用同步数组和列表、基于排序列表的迭代以及使用字典和Counter。通过实例展示了如何将给定字符串数组中的异位词组合在一起。
摘要由CSDN通过智能技术生成

本文为Python算法题集之一的代码示例

题目49:字母异位词分组

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

字母异位词 :是由重新排列原单词所有字母得到的新单词

  1. 使用同步数组list和检索集合set

    def groupAnagrams_ext1(self, strs):
        iLen = len(strs)
        setlist = []
        for iIdx in range(iLen):
            setlist.append(sorted(strs[iIdx]))
        allset = []
        for aSet in setlist:
            if aSet in allset:
                continue
            allset.append(aSet)
        result=[]
        for aSetItem in allset:
            tmpResultItem=[]
            for iIdx in range(iLen):
                if setlist[iIdx] == aSetItem:
                    tmpResultItem.append(strs[iIdx])
            result.append(tmpResultItem)
        return result
    
    astr = ["eat", "tea", "tan", "ate", "nat", "bat"]
    print(groupAnagrams_ext1(astr))
    # 运行结果
    # [['eat', 'tea', 'ate'], ['tan', 'nat'], ['bat']]
    
  2. 使用同步数组list和结果数组list

    def groupAnagrams_ext2(self, strs):
        iLen = len(strs)
        sortlist = []
        for iIdx in range(iLen):
            sortlist.append(sorted(strs[iIdx]))
        result, resultsort=[], []
        for iIdx in range(iLen):
            if sortlist[iIdx] in resultsort:
                result[resultsort.index(sortlist[iIdx])].append(strs[iIdx])
            else:
                resultsort.append(sortlist[iIdx])
                result.append([strs[iIdx]])
        return result
    
    astr = ["eat", "tea", "tan", "ate", "nat", "bat"]
    print(groupAnagrams_ext2(astr))
    # 运行结果
    # [['eat', 'tea', 'ate'], ['tan', 'nat'], ['bat']]
    
  3. 使用字典和元组

    def groupAnagrams_ext3(self, strs):
        from collections import Counter
        anagrams = {}
        for s in strs:
            counter = Counter(s)
            key = tuple(sorted(counter.items()))
            if key not in anagrams:
                anagrams[key] = []
            anagrams[key].append(s)
        return list(anagrams.values())
    
        
    astr = ["eat", "tea", "tan", "ate", "nat", "bat"]
    print(groupAnagrams_ext3(astr))
    # 运行结果
    # [['eat', 'tea', 'ate'], ['tan', 'nat'], ['bat']]
    

    一日练,一日功,一日不练十日空

    may the odds be ever in your favor ~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长孤秋落

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值