力扣20. 有效的括号

"该博客介绍了如何使用栈解决有效括号问题,通过遍历字符串并利用栈来检查括号是否匹配。当遇到左括号时将其压入栈中,遇到右括号则检查栈顶元素是否为其匹配的左括号,若是则弹出栈顶元素,否则返回错误。最终,栈为空则表示括号匹配成功,否则失败。示例中,输入字符串"{[]}
摘要由CSDN通过智能技术生成

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

示例:

输入:s = "{[]}"
输出:true

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


利用栈解题

注意:我们需要判定符号是成对出现的,若s = "([)]",我们栈中的元素按放入的顺序看为'(',  '[', 而此时来了 ')' 符号,不满足我们需要的 ']'符号,返回错误。

Ⅰ.计算传入的字符串s的大小n,如果n是奇数,直接返回false

Ⅱ.n为偶数的情况下,创建一个unordered_map<char,int> map,用来存放要判断的符号,以符号为key,将他们的编号设置为value。

unordered_map<int,int> map={
            {'(',1},
            {'[',2},
            {'{',3},
            {')',4},
            {']',5},
            {'}',6}
        };

Ⅲ.创建一个存放我们遍历s得到的字符

stack<char> stk;

Ⅳ.当往stk中放入数据的时候,判断数据对应的value是否>=1并且<=3,满足此条件,说明放入栈中的满足符号的左条件,即符号为  '(',  '[',  '{'  三者中的一种

Ⅵ.如果往stk中放入数据的时候,栈不为空,并且满足

map[stk.top()]==flag-3

说明放入栈中的满足符号的右条件,即符号为  ')',  ']',  '}'  三者中的一种

Ⅶ.如果上述两种条件都不满足,返回false

Ⅷ.遍历完s后,判断此时栈是否为空,如果为空返回true,否则返回false

完整代码

class Solution {
public:
    bool isValid(string s) {
        int n=s.size();
        if(n%2==1){
            return false;
        }
        unordered_map<int,int> map={
            {'(',1},
            {'[',2},
            {'{',3},
            {')',4},
            {']',5},
            {'}',6}
        };
        stack<char> stk;
        for(char cur:s){
            int flag=map[cur];
            if(flag>=1&&flag<=3){
                stk.push(cur);
            }
            else if(!stk.empty()&&map[stk.top()]==flag-3){
                stk.pop();
            }
            else{
                return false;
            }
        }
        if(!stk.empty()){
            return false;
        }
        return true;
    }
};

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值