解题思路:
- 本题只有三种括号,所以采用unordered_map(底层hash算法,不需要进行排序)来存储,注意采用右侧括号作为key值存储。
- 还要优先判断字符串长度问题来提前返回,加快运行速度
class Solution {
public:
bool isValid(string s) {
int n = s.size();
if (n % 2 == 1) {
return false;
}
//这里要将左右括号反着放,也就是右边括号作为key,因为这样如果出现右括号只有当栈顶存有相应的左括号才返回true,否则就要返回false;
//当出现左括号时只需要将其压入栈中就可以了
unordered_map<char,char>umap = {
{')','('},
{'}','{'},
{']','['}
};
stack<char>stk;
for(char c : s){
if(umap.count(c)){
if(stk.empty() || stk.top()!=umap[c]){
return false;
}
stk.pop();
}else{
stk.push(c);
}
}
return stk.empty();
}
};