牛客题霸 [括号序列] C++题解/答案

题目描述

给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。

题解:

用栈来做
用栈来存每个符号的左边,当出现符号右边时,看栈的顶部是否为该符号的左边,如果不能匹配则返回0,能匹配则将栈顶pop
全部结束时栈应该是空的,否则返回0
注意:题目给的数据有可能会先输入符号的右部分,所以当栈为空时也应该压入字符

if(s[i]=='('||s[i]=='{'||s[i]=='['||q.empty())

没有这个q.empty()会导致段错误

代码:

class Solution {
   
public:
    /** * * @param s string字符串 * @return bool布尔型 */
    bool isValid(string s) {
   
        // write code here
        stack<char>q;
        for(int i=0;i<s.length();i++)
        {
   
            if(s[i]=='('||s[i]=='{'||s[i]=='['||q.empty())
            {
   
                q.push(s[i]);
                continue;
            }
            if(s[i]==')'&&q.top()!='(')return false;
            else if(s[i]=='}'&&q.top()!='{')return false;
            else if(s[i]==']'&&q.top()!='[')return false;
            else if(q.empty())return false;
            q.pop();
        }
        if(q.empty())return true;
        else return false;
    }
};