class Solution {
public:
bool isValid(string s) {
if(s.length()<=0) return true;
stack<char> save;
if(s[0]=='('||s[0]=='['||s[0]=='{')
save.push(s[0]);
else return false;
int i=1;
while(i<s.length()){
if(s[i]=='('||s[i]=='['||s[i]=='{')
save.push(s[i]);
else{
if(save.empty()) return false;//如果栈空了
if(s[i]==')' && save.top()!='(')
return false;
if(s[i]=='}' && save.top()!='{')
return false;
if(s[i]==']' && save.top()!='[')
return false;
save.pop();
}
i++;
}
if(save.empty() && i>=s.length()) return true;
else return false;
}
};
循环条件当字符串没有遍历完,如果当前字符时左括号,那么压栈,如果当前时右侧括号,此时如果栈空了,那么就返回false,如果栈顶不空,但是与右侧括号不匹配,那么也返回false,直到全部匹配,此时栈空,且i大于等于n。