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

有效括号(Valid Parentheses)测试用例"(){}}{"报SEGV运行错误问题咨询

错误触发原因

问题核心是逻辑运算符优先级错误:C++ 中 && 优先级高于 ||,你的判断条件没有加括号做分组,导致执行逻辑完全不符合预期:

  • 你写的第三个判断条件 !st.empty() && s[i]==')' ||s[i]==']' || s[i]=='}' 实际执行逻辑等价于 (!st.empty() && s[i]==')') || s[i]==']' || s[i]=='}'
  • 当栈已经为空,但当前字符是]或}时,该条件仍然会判定为真,代码会进入分支执行st.top()读取空栈的栈顶元素,触发未定义行为,直接导致段错误,就是你看到的ASAN报错。

就拿你报错的测试用例"(){}}{"举例:

  1. 处理前4个字符() {}后,栈已经被清空
  2. 第5个字符是},此时栈为空,判断第三个条件时,因为s[i] == '}'满足,直接进入分支,调用空栈的top()方法触发崩溃。

另外你的代码存在逻辑冗余,前两个判断分支完全重复:只要是左括号,不管栈空不空都可以直接入栈,不需要分开判断。

修改方案

给逻辑判断加正确的括号分组,同时简化冗余逻辑,修改后的代码如下:

class Solution {
public:
    bool isValid(string s) {
        stack<char> st;
        for (char c : s) {
            // 左括号直接入栈
            if (c == '(' || c == '[' || c == '{') {
                st.push(c);
            } else {
                // 右括号时栈为空直接返回false
                if (st.empty()) return false;
                // 括号不匹配直接返回false
                if ((c == ')' && st.top() != '(') || 
                    (c == ']' && st.top() != '[') || 
                    (c == '}' && st.top() != '{')) {
                    return false;
                }
                // 匹配则弹出栈顶
                st.pop();
            }
        }
        // 最后栈为空才是合法括号串
        return st.empty();
    }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:36:07