20.有效的括号
思路:栈+哈希表(判断括号类型)
1.使用一个哈希表key为右括号,用于后续判断当前碰到的是否是右括号+通过value判断是否有匹配左括号
2.过程:将当前字符到map中查找,碰到左括号入栈,碰到右括号比较value与栈顶元素
如果相等就匹配了一对括号,左括号出栈,不等就return false
最终结果需要判断栈是否为空,如果栈没空说明有剩下未匹配的左括号
class Solution {
public:
bool isValid(string s) {
unordered_map<char,char> map;
map={{')', '('},{']', '['},{'}', '{'}};
stack<char> stk;
for(int i=0;i<s.size();i++){
if(map.count(s[i])>0){ //当前碰到的是右括号,看栈顶是不是匹配的左括号
if(stk.empty()){ //栈为空
return false;
}
char tmp=stk.top();
if(tmp==map[s[i]]){//匹配,左括号出栈
stk.pop();
}else{
return false;
}
}else{//当前碰到左括号,左括号入栈
stk.push(s[i]);
}
}
return stk.empty(); //避免还有左括号未匹配的情况
}
};