原理是两个成对的括号消掉,不可能存在增加一个括号可以消掉两对括号的情况,要特判只有右半边没有左半边而且栈还是空的的情况,"]["这种不可能是有效的对吧?只要括号序列有效,那么最后一定完全能匹配,全都消消乐消没了栈就是空的。
注意:"[(])"不是有效的,两个成对括号没贴一起,中间隔了奇奇怪怪的玩意,消不了
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();
}
};

京公网安备 11010502036488号