Leecode热题100第20题,有效的括号。Day03.

该代码段定义了一个名为isValid的函数,使用栈数据结构来检查输入字符串中的括号是否成对出现,从而判断字符串是否包含有效括号。遍历字符串,遇到左括号压栈,遇到右括号时检查栈顶元素是否与其匹配,不匹配或栈为空则返回false。遍历结束后,若栈为空则返回true,表示所有括号都已正确配对。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class Solution
{
public:
    bool isValid(string s)
    {
        if(s.length()%2 != 0) return false;//如果符号不是成对出现,那肯定不是有效括号
        stack<char>stk;//创建栈 符号匹配问题一般要用栈
        for(int i = 0;i <s.length();i++)
        {
            if(s[i] ==  '(' || s[i] == '[' || s[i] == '{')//判断是否是左括号,是就压入栈
            {
                stk.push(s[i]);
            }
            //那就是右括号
            else 
            {
                if(stk.empty()) return false;//栈为空情况,则没有匹配的

                if(s[i] == ')' && stk.top() == '(' ||//栈不为空情况
                    s[i] == ']' && stk.top() == '[' ||
                    s[i] == '}' && stk.top() == '{' )
                    {
                       stk.pop();//出栈
                    }
                else return false;
            }
          
           
        }
         return stk.empty();//所有遍历完,判断如果最后出完栈,则说明为有效括号,会返回true
    }
};

思路:根据栈先入后出的特性,进行符号匹配。判断如果是左括号,则将其压入栈;如果是右括号,那判断栈里面是否有元素,没有就无效…最后return stk.empty();如果遍历完且入栈出栈完成,则栈无元素,empty()应该返true。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lemonbaby106

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值