1.用一个哈希表存储括号
2.循环让左括号入栈,右括号则匹配栈中元素(先入栈的后匹配,后入栈先匹配)
class Solution {
public:
bool isValid(string s) {
int n = s.size();
// 如果是奇数,直接返回false
if(n % 2 == 1){
return false;
}
// 定义括号的键值对匹配
unordered_map<char,char> pairs = {
{')','('},
{']','['},
{'}','{'}
};
// 定义一个栈
stack<char> stk;
for(char ch:s){
// 右括号,匹配————count(ch):判断ch是否在pairs哈希表中,在就返回1
if(pairs.count(ch)){
// 如果此时栈空 , 或者 栈顶元素不能与之对应,则false
if(stk.empty() || stk.top() != pairs[ch]){
return false;
}
// 匹配成功,出栈
stk.pop();
}
// 左括号,入栈
else{
stk.push(ch);
}
}
return stk.empty();
}
};
时间复杂度:O(n)
空间复杂度:O(n+∣Σ∣),其中 Σ 表示字符集map