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

LeetCode有效括号题目求解时出现KeyError: ')'报错是什么原因

LeetCode有效括号题运行报错排查

题目说明

求解LeetCode简单算法题:给定一个仅包含(、)、{、}、[、]的字符串s,判定输入是否为有效括号串。有效括号串需满足两个条件:

  • 左括号必须由相同类型的右括号闭合
  • 左括号必须以正确的顺序闭合
    针对测试用例"()[]{}"运行代码时触发报错。

提交的问题代码

class Solution:
    def isValid(self, s: str) -> bool:
        matchdict = {'(': ')', '{': '}', '[': ']'}
        slen = len(s)
        if slen%2!=0:
            return False
        
        for i in range(slen // 2):
            if (matchdict[s[i]] != s[slen-i-1] and (matchdict[s[2*i]] != s[2*i+1])):
                return False
        
        
        return True

运行报错信息

KeyError: ')'
    if (matchdict[s[i]] != s[slen-i-1] and (matchdict[s[2*i]] != s[2*i+1])):
Line 9 in isValid (Solution.py)
    ret = Solution().isValid(param_1)
Line 32 in _driver (Solution.py)
    _driver()
Line 43 in <module> (Solution.py)

问题原因分析

直接报错原因

定义的matchdict仅以三种左括号作为键,没有添加右括号到映射中。当循环访问到字符串里的右括号时,直接将右括号作为键去字典中查询,就会触发KeyError。
以测试用例"()[]{}"为例,字符串总长度为6,循环变量i的取值范围是0、1、2:

  • 当i=1时,s[i]取到索引1位置的字符),该字符不在matchdict的键集合中,执行matchdict[s[i]]时直接抛出键不存在的错误,和报错栈信息完全吻合。

代码逻辑缺陷

就算修复了KeyError问题,当前代码的判定逻辑也完全不满足题目要求,核心问题是对括号匹配的规则理解有偏差:

  1. 代码试图同时用「首尾位置对称匹配」「相邻位置成对匹配」两种规则判定,且用and连接判断条件——只有两种匹配规则同时不满足时才会判定为无效,漏判率极高。
  2. 这两种规则都无法覆盖括号的嵌套场景:比如合法用例"{[]}"既不符合逐对相邻匹配,也不会被当前逻辑正确识别;非法用例"([)]"反而会因为首尾位置匹配被误判为有效。
  3. 括号匹配的核心是嵌套顺序校验,常规正确实现需要借助栈结构:遍历字符串时遇到左括号压栈,遇到右括号时弹出栈顶元素校验是否匹配,遍历结束后再确认栈已清空,才能覆盖所有合法/非法场景。

内容的提问来源于stack exchange,提问作者Mr. Black

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:45:48