You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode20有效括号题:zip生成字典键值对匹配异常

问题分析与解决:LeetCode 20题「有效的括号」字典键值不匹配问题

问题根源

你代码里的核心bug是用无序的集合(set)来生成字典的键值对:

  • Python的集合没有固定遍历顺序,每次运行时open_braces_set和close_braces_set的元素顺序可能随机变化,导致zip出来的字典映射完全错位(比如'{'可能对应']','['对应')'),这就是答案偶尔出错的原因。

修正方案

方案1:用列表替代集合,保证顺序对应

把原来的集合改成列表,这样zip时的键值对应关系就固定了:

class Solution:
    def isValid(self, s: str) -> bool:
        opened_ls = []
        # 换成有序的列表,确保左括号和右括号一一对应
        open_braces = ['{', '[', '(']
        close_braces = ['}', ']', ')'] 
        d = dict(zip(open_braces, close_braces))

        for symb in s:
            if symb in open_braces:
                opened_ls.append(symb)
            else:
                try:
                    if d[opened_ls.pop()] != symb:
                        return False
                except Exception:
                    # 遇到右括号但无匹配的左括号,直接返回False
                    return False
        # 检查是否有未闭合的左括号
        return not opened_ls

方案2:直接手动定义字典(更推荐)

跳过zip,直接写出明确的键值映射,代码更直观也不容易出错:

class Solution:
    def isValid(self, s: str) -> bool:
        opened_ls = []
        # 直接定义正确的括号映射关系
        d = {'{': '}', '[': ']', '(': ')'}

        for symb in s:
            if symb in d:
                opened_ls.append(symb)
            else:
                try:
                    if d[opened_ls.pop()] != symb:
                        return False
                except Exception:
                    return False
        return not opened_ls

补充说明

你预期dict(zip(list1, list2))生成固定键值对是对的,但这个前提是list1和list2是有序容器(比如列表、元组),集合是无序结构,绝对不能用来做这种依赖顺序的映射生成。

内容的提问来源于stack exchange,提问作者Luchok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 20:22:12