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

含普通字符的Valid Parenthesis验证始终返回False,求技术协助

修复包含普通字符的有效括号验证代码

你的代码存在三个核心问题,导致遇到普通字符时返回False,以下是问题分析和修复方案:

问题点

  • 遍历对象错误:函数内部循环遍历的是全局变量str1,而非传入的参数test_str,导致函数无法正确处理自定义输入。
  • 未忽略普通字符:遇到非括号字符时,没有跳过处理,反而进入else分支执行栈弹出和匹配判断,这会直接导致错误(普通字符不可能匹配任何括号)。
  • 错误的长度校验:直接通过字符串总长度是否为偶数判断有效性不合理,因为普通字符的存在会让总长度可能为奇数,但括号本身是成对有效的(比如"(a)"总长度3,但括号合法)。

修复后的代码

str1 = '((a))[]'

def isValid(test_str):  
    par_dict = {'(':')','{':'}','[':']'}
    stack = []
    for char in test_str:
        # 处理开括号:入栈
        if char in par_dict:
            stack.append(char)
        # 处理闭括号:匹配栈顶开括号
        elif char in par_dict.values():
            if not stack:
                return False
            open_brac = stack.pop()
            if char != par_dict[open_brac]:
                return False
        # 普通字符直接跳过,不做任何处理
    # 最后栈必须为空,说明所有开括号都找到了对应的闭括号
    return len(stack) == 0

# 测试示例
print(isValid(str1))  # 输出: True

关键修改说明

  1. 改为遍历传入的test_str,保证函数的通用性和正确性。
  2. 仅对开括号、闭括号做逻辑处理,普通字符直接跳过。
  3. 移除了总长度奇偶校验,改为最终通过栈是否为空判断括号是否完全匹配。
  4. 优化字典判断逻辑,char in par_dict直接判断是否为开括号,代码更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:54:25