LeetCode 每日一题( #有效的括号)DAY 1

有效的括号

题目本身就很适合用栈去匹配,如果是左括号其中一个就用栈存下,如果是右括号就和栈的最后一个元素匹配,匹配不成功就返回false,成功就继续比较下一个。
所以第一发代码如下:

class Solution {
public:
    bool isValid(string s) {
        const int N = 1e4+10;
        int sta[N],idx = 0;
        for(char a:s)
        {
            if((int)a == 40||(int)a == 123||(int)a == 91)sta[++idx]=(int)a;
            else if((int)a == 41)
            {
                if(sta[idx] == 40)idx--;
                else return false;
            }
            else if((int)a == 125)
            {
                if(sta[idx] == 123)idx--;
                else return false;
            }
            else if((int)a == 93)
            {
                if(sta[idx] == 91)idx--;
                else return false;
            }
            else return false;
        }
        return true;
    }
};

这个代码过了样例,但是对于“["单个括号,没有进行特判,应该输出false而输出了true;所以我们需要加入一个check,每当遇到左括号时让check = 0,碰到右括号时check = 1,只有当check = 1时才会输出true

AC代码如下

class Solution {
public:
    bool isValid(string s) {
        const int N = 1e4+10;
        int sta[N],idx = 0;
        bool check = 0;
        for(char a:s)
        {
            if((int)a == 40||(int)a == 123||(int)a == 91)
            {
                sta[++idx]=(int)a;
                check = 0;
            }
            else if((int)a == 41)
            {
                check = 1;
                if(sta[idx] == 40)idx--;
                else return false;
            }
            else if((int)a == 125)
            {
                check = 1;
                if(sta[idx] == 123)idx--;
                else return false;
            }
            else if((int)a == 93)
            {
                check = 1;
                if(sta[idx] == 91)idx--;
                else return false;
            }
            else return false;
        }
        if(!check||idx!=0)return false;
        return true;
    }
};

(一开始没用栈,做了好久55555)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值