原理是两个成对的括号消掉,不可能存在增加一个括号可以消掉两对括号的情况,要特判只有右半边没有左半边而且栈还是空的的情况,"]["这种不可能是有效的对吧?只要括号序列有效,那么最后一定完全能匹配,全都消消乐消没了栈就是空的。
注意:"[(])"不是有效的,两个成对括号没贴一起,中间隔了奇奇怪怪的玩意,消不了
class Solution { public: bool isValid(string s) { stack<char> a; for(int i=0;i<s.size();i++){ if((s[i]==')'||s[i]==']'||s[i]=='}')&&a.empty())return false; if((s[i]==')'&&a.top()=='(')||(s[i]==']'&&a.top()=='[')||(s[i]=='}'&&a.top()=='{')){ a.pop(); }else{ a.push(s[i]); } }return a.empty(); } };