原题链接
思路
栈+哈希表
代码实现
class Solution {
public:
unordered_map<char, char> brackets = {
{')', '('},
{']', '['},
{'}', '{'},
};//建立哈希表
stack<char>stk;
//建一个栈
bool isValid(string s) {
int len=s.length();
if (len%2)
return false;//奇数个括号直接返回
else if (len==0)
return true;
else{
for (char ch:s){
//基于范围的for循环
if (brackets.count(ch)) {
//指ch为右括号中的某一个
if (stk.empty() || stk.top() != brackets[ch]){
return false;
}//如果栈是空的却出现了一个右括号
//或者栈顶的元素并不是与之配对的左括号,就return FALSE
stk.pop();
//如果栈顶的元素是与之配对的左括号,就弹出栈顶的那个左括号
//即栈里面只存左括号,右括号是不会入栈的
}
else {
stk.push(ch);
//左括号入栈
}
}
return stk.empty();
}
}
};