详细思路

遇到左括号,希望后面会有同类型有括号,放入栈,后遇到的左括号必须先闭合,所以正好用栈,遇到右括号,如果栈为空或者栈顶元素不是对应右括号都是错的,否则把那个对应类型右括号pop,如果长度是奇数直接错
 
精确定义
c正在遍历的字符
stk存储左括号或遇到右括号的时候栈顶正好是左括号的栈
 
class Solution {
public:
    bool isValid(string s) {
        int n=s.size();
        if(n%2==1)return false;
        stack<char>stk;
        for(char c:s){
            if(c==')'||c==']'||c=='}'){
                if(stk.empty())return false;
                if(c==')'&&stk.top()!='(')return false;
                if(c==']'&&stk.top()!='[')return false;
                if(c=='}'&&stk.top()!='{')return false;
                else stk.pop();
            }
            else stk.push(c);
        }
        if(stk.empty())return true;
        else return false;
    }
};

 

 

posted on 2021-07-26 09:33  offer快到碗里来~  阅读(36)  评论(0)    收藏  举报