问题
思路
正常的匹配我就不说了,考虑两种特殊情形。
左括号个数大于右括号,当之前匹配成功的时候,最优的左括号会多。
右括号个数大于左括号时,当之前匹配成功的时候,栈会提前为空。
给你“]”这种数据。
代码
class Solution {
public:
bool isValid(string s) {
int sz = s.size();
if(!sz) return 0;
stack<char> stk;
for(int i = 0; i < sz; ++i){
if( s[i] == '(' || s[i] == '[' || s[i] == '{' )
stk.push(s[i]);
else{
if(stk.empty()) return false;
char& top = stk.top();
if( s[i] == ')' ){
if(top == '(') stk.pop();
else return false;
}
else if( s[i] == ']' ){
if(top == '[') stk.pop();
else return false;
}
else{
if( top =='{' ) stk.pop();
else return false;
}
}
}
return stk.empty();
}
};