【问题标题】:Group anagrams Leetcode question (python)组字谜 Leetcode 问题(python)
【发布时间】:2022-01-08 20:26:59
【问题描述】:

我正在查看这个 leetcode 问题 Leetcode。我试图了解提供的解决方案是:

class Solution:
    def groupAnagrams(strs):
        ans = collections.defaultdict(list)
        for s in strs:
            count = [0] * 26
            for c in s:
                count[ord(c) - ord('a')] += 1
            ans[tuple(count)].append(s)
        return ans.values()

我知道我们正在创建一个字符计数元组作为键,并将与元组匹配的单词作为值添加到映射中。

让我感到困惑的是 ans[tuple(count)].append(s) 这一行。为什么不是 ans[tuple(count)]=s。追加是否向地图添加值?我以为地图没有 append() 方法?

任何人都可以澄清这一特定行吗? 谢谢

【问题讨论】:

    标签: python hashmap


    【解决方案1】:

    ans 是一个defaultdict,如果键当前没有映射到任何东西,它会创建一个新列表。因此,ans[tuple(sorted(s))] 在字典中查找已排序元组的当前值(预期为列表)。如果没有,它会创建一个新的空列表并将其与密钥相关联。然后它将s 附加到该值。字典没有append 方法,但值可能。

    【讨论】:

    • 那么,map 的值是 list 类型的,我们将字符串附加到 list 中,key 是元组?
    • 是的。当然,Python 不会阻止您将其他类型放入地图中。
    • 还要注意count 构造是不必要的。我看到编辑将所描述的提供的解决方案从字符串字符的排序元组更改为字母计数 - 您可以使用 tuple(sorted(s)) 作为 dict 键。当且仅当它们的排序表示(作为元组或作为字符串)相同时,两个单词才是字谜。例如"eat""tea" 都具有排序的元组表示("a", "e", "t")。把它变成 1 a、1 e、1 t 和 0 的任何其他计数结构并没有错误,但没有必要。
    【解决方案2】:

    如果ans = collections.defaultdict(list) 让你感到困惑,你可以这样写:

    class Solution:
       # your question does not have `self`  "def groupAnagrams(strs):"
        def groupAnagrams(self,strs):
            # ans = collections.defaultdict(list)
            ans={}
            for s in strs:
                count = [0] * 26
                for c in s:
                    count[ord(c) - ord('a')] += 1
                # defaultdict already sets this for us
                if tuple(count) not in ans:
                    ans[tuple(count)]=[]            
                ans[tuple(count)].append(s)
            return ans.values()
    

    【讨论】:

      猜你喜欢
      • 2022-06-12
      • 2021-09-22
      • 2015-01-13
      • 2016-05-10
      • 1970-01-01
      • 1970-01-01
      • 2020-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多