给定一个字符串所表示的括号序列,包含以下字符: '(', ')'
, '{'
, '}'
, '['
and ']'
, 判定是否是有效的括号序列。
样例
括号必须依照 "()"
顺序表示, "()[]{}"
是有效的括号,但 "([)]"
则是无效的括号。
解题思路:
利用栈的思想,遇到左括号,全部压入栈中;遇到右括号或其他,判断栈顶的元素是否是相对应的左括号,若是则弹出栈顶元素,若不是则返回false,若栈为空,也返回false;
注意在一开始设限定条件时,奇数个数目的必然不是配对的。
class Solution { public: /** * @param s: A string * @return: whether the string is a valid parentheses */ bool isValidParentheses(string &s) { // write your code here if(s.size()%2 == 1 || s.empty()) return false; stack<char> res; for(int i=0;i<s.size();i++) { if(s[i] == '(' || s[i] == '{' || s[i] == '[') res.push(s[i]); else if(s[i] == ')') { if(!res.empty() && res.top() == '(') res.pop(); else return false; } else if(s[i] == '}') { if(!res.empty() && res.top() == '{') res.pop(); else return false; } else if(s[i] == ']') { if(!res.empty() && res.top() == '[') res.pop(); else return false; } } if(res.empty()) return true; else return false; } };