这是一道经典的栈的问题,我的思路就是遇到左括号进栈,遇到右括号看栈顶元素是不是匹配,如果是匹配的则出栈,前面先判断第一个字符是不是右括号,还有字符串的长度给卡掉一些数据,中间每次要判断是不是为空,不然会运行错误,最后如果栈空了则是有效的,否则是无效的。
class Solution {
public:
bool isValid(string s) {
stack<char>flag;//把左括号全部存进去
if( s.length() == 1 || s[0] == ']'
|| s[0] == '}' || s[0] == ')' ) return false;//简单的卡掉一些非法数据
for( int i = 0 ; i < s.length() ; i++ ){
if( s[i] == '(' || s[i] == '{' || s[i] == '[' ) flag.push(s[i]);//入栈
else if( s[i] == ')' ){
if( flag.empty() ) return false;//判断非空
if( flag.top() != '(' ) return false;//看是否匹配
flag.pop();
}
else if( s[i] == ']' ){
if( flag.empty() ) return false;
if( flag.top() != '[' ) return false;
flag.pop();
}
else if( s[i] == '}' ){
if( flag.empty() ) return false;
if( flag.top() != '{' ) return false;
flag.pop();
}
}
if( flag.empty() ) return true;
else return false;
}
};