20. 有效的括号 力扣(简单) 栈,害怕括号

20. 有效的括号

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

有效字符串需满足:

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

示例 1:

输入:s = "()"
输出:true

题解:https://leetcode-cn.com/problems/valid-parentheses/solution/you-xiao-de-gua-hao-by-leetcode-solution/

代码:

class Solution {
public:
    bool isValid(string s) {
    stack<char> Q;
    bool flag=1;
    for(auto i:s)
    {
        if(i=='(' || i=='[' || i=='{') Q.push(i);
         else 
         {
             if(i==')')
             {
                 if(Q.empty() || Q.top()!='(') {flag=0; break;}
                   else Q.pop();
             }  
             if(i==']')
             {
                 if(Q.empty() || Q.top()!='[') {flag=0; break;}
                   else Q.pop();
             } 
             if(i=='}')
             {
                 if(Q.empty() || Q.top()!='{') {flag=0; break;}
                   else Q.pop();
             } 
         }
    }
    if(Q.size()>0) flag=0;
    return flag;
    }
};

优秀写法:慢一点

class Solution {
public:
    bool isValid(string s) {
    stack<char> Q;
    unordered_map<char,char> mp={ {')','('}, {']','['}, {'}','{'}};
    bool flag=1;
    for(auto i:s)
    {
        if(i=='(' || i=='[' || i=='{') Q.push(i);
         
        if(i==')' || i==']' || i=='}')
        {
            if(Q.empty() || Q.top()!=mp[i]) {flag=0; break;}
            else Q.pop();
        }  
    }
    if(Q.size()>0) flag=0;
    return flag;
    }
};

 

posted on 2021-09-14 21:59  Yxter  阅读(24)  评论(0编辑  收藏  举报

导航