题目地址:力扣
解法:用栈匹配的方法来判断括号是否符合
几点小tips:
1、可以先判断字符串s是不是2的倍数,如果不是,直接返回false
2、可以用map来存括号对,碰到s里面的字符直接找,速度很快,但是要将右括号存为key,不然碰到右括号的时候没法找
3、注意循环结束以后,只有栈为空才是正确匹配情况,如果栈还有东西说明匹配失败
class Solution {
public:
bool isValid(string s) {
// 用这个先拦住一些离谱的情况
int sz = s.size();
if (sz % 2 != 0)
return false;
stack<char> syb_stack;
// 这个map里面一定要右括号为key,否则下面的判断就没法执行
unordered_map<char, char> pairs = {
{')', '('},
{'}', '{'},
{']', '['}
};
for (auto c : s)
{
if (pairs.count(c)) // 右括号才会进来
if (syb_stack.empty() || syb_stack.top() != pairs[c])
return false;
else
syb_stack.pop();
else // 左括号才会进来
{
syb_stack.push(c);
}
}
return syb_stack.empty(); // 最后栈为空才是正确情况
}
};
Accepted
- 92/92 cases passed (0 ms)
- Your runtime beats 100 % of cpp submissions
- Your memory usage beats 43.92 % of cpp submissions (6.2 MB)