经典的括号匹配问题,用stack解决。
class Solution {
public:
bool isValid(string s) {
unordered_map<char,char> pairs = {
{')','('},
{']','['},
{'}','{'},
};
stack<char> stk;
for(char i : s)
{
// 遇到右括号
if(pairs.count(i))
{
// 遇到右括号时,如果存储左括号的栈为空了,说明右括号多了,返回false;
// 遇到右括号时,如果存储左括号和右括号不匹配,返回false;
if(stk.empty()||stk.top()!=pairs[i])
{
return false;
}
// 程序走到这的时候,说明上面的if不成立,说明当前的左右括号匹配,于是弹出左括号,同时循环进入到下一步;
stk.pop();
}
// 遇到左括号,压入栈
else
{
stk.push(i);
}
}
// 程序走到最后,如果栈为空了,那就是完成了匹配,如果不为空,那就是有多余的左括号;
return stk.empty();
}
};
网友评论