leecode第二十题(有效的括号)

本文介绍了一种使用栈来验证括号是否正确配对的方法。通过对输入字符串中的括号进行符号转换,并利用栈的数据结构特性来判断左右括号是否能够正确闭合。此方法能有效处理各种类型的括号匹配问题。

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

 

class Solution {
public:
    bool isValid(string s) {
        int start=0,end=s.size()-1;
        if(end==-1)//万万没想到,他把空字符串当成true了
            return true;
        
        int ss[end+1];//歪方法,把左括号全部<0,右括号都>0,且同类型符号绝对值一样
        for(int i=0;i<end+1;i++)
        {
            if(s[i]=='(')
                ss[i]=-1;
            else if(s[i]==')')
                ss[i]=1;
            else if(s[i]=='{')
                ss[i]=-2;
            else if(s[i]=='}')
                ss[i]=2;
            else if(s[i]=='[')
                ss[i]=-3;
            else if(s[i]==']')
                ss[i]=3;
            else
                return false;
        }
        
        stack<int> str;
        while(start<end+1)//要等于end啊,老是忘
        {
            if(ss[start]<0)//如果小于0就入栈
                str.push(ss[start]);
            
            if(ss[start]>0)//如果大于0,判断栈空不空,不空的话栈顶和当前数是否编号
            {
                if(!str.empty() && ss[start]==-1*(str.top()))
                    str.pop();
                else
                    return false;//否则假
            }
            start++;
        }
        
        if(!str.empty())//结束后检测栈空不,不然对于全是左括号的就通过了
            return false;
        return true;
    }
};

 

分析:

一个简单题啊,还是情况没分析到位,一开始思路错了。

后来思路对了,但是程序总是有毛病,但是总得来说还是情况没分析到位。

转载于:https://www.cnblogs.com/CJT-blog/p/10583094.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值