LeetCode - 20 有效的括号

该代码定义了一个名为isValid的函数,通过栈数据结构检查给定的字符串是否由有效括号对组成。函数遍历字符串,将左括号压入栈,遇到右括号时检查栈顶元素是否与其匹配,确保所有括号成对出现。
摘要由CSDN通过智能技术生成

bool isValid(string s) 
{
    if (s.size() % 2 == 1)
    {
        return false;  // 假如是奇数个字符,则肯定有个括号落单
    }

    std::stack<char> chStack;  // 初始化一个辅助栈,用于存放表示括号的字符

    for (auto ch : s)  // 遍历整个表示括号的字符串,挨个检查
    {
        switch (ch)
        {
            case '(':  // 假如是左括号,先入栈了再说,期待与自己匹配的右括号出现
            case '[':
            case '{':  
                chStack.push(ch);
                break;
            
            // 假如是右括号,则栈不能为空,若栈为空,根据题意,不是有效的括号字符串
            // 栈不为空的同时,栈顶元素还必须是与当前右括号匹配的左括号
            // 检查栈顶元素匹配则弹出栈顶元素,继续字符串中下一个字符检查;不匹配直接返回
            case ')':  
                if (chStack.empty() == true || chStack.top() != '(')
                    return false;
                else
                    chStack.pop();
                break;
            case ']':
                if (chStack.empty() == true || chStack.top() != '[')
                    return false;
                else
                    chStack.pop();
                break;
            case '}':
                if (chStack.empty() == true || chStack.top() != '{')
                    return false;
                else
                    chStack.pop();
                break;
            // 其他情况,返回不匹配
            default:
                return false;
        }
    }
    // 按照上述规则检查到的子串是有效的括号字符串
    // 此时栈为空,字符串全部检查完,说明整个字符串是一个有效的符合题意的括号字符串
    // 若栈不为空,比如说 "{{}[]([]){" ,最后栈中遗留了两个 '{' ,那也不是有效的括号串
    return chStack.empty();
}

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值