思路
遇到左括号就压栈,遇到右括号就判断栈顶是否匹配,不匹配就直接false
,栈为空也直接false
,匹配的话说明能配对则出栈。最后遍历完看栈里是否还有元素,有则说明有落单的左括号,否则就是合法的括号序列。
class Solution { public: /** * * @param s string字符串 * @return bool布尔型 */ bool isValid(string s) { // write code here stack<char> stk; int m = s.size(); for(int i = 0; i < m; ++i) { if(s[i] == '(' || s[i] == '[' || s[i] == '{'){ stk.push(s[i]); } else if(stk.empty()) return false; else if(stk.top() == s[i] - (')'-'(') || stk.top() == s[i] - ('}'-'{') || stk.top() == s[i] - ( ']' - '[' ) ){ stk.pop(); } else return false; } if(!stk.empty()) return false; return true; } };