20. 有效的括号
题目描述
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = “([)]”
输出:false
示例 2:
输入:s = “{[]}”
输出:true
思路:
- 首先判断,数组s中元素的数量:若为奇数,直接返回false;
- 将要求的括号对应放置在哈希表中,以便查找元素;
- 写一个数组,用以存放未匹配上的左侧括号;
class Solution {
public:
bool isValid(string s) {
if(s.size()%2==1){
return false;
} //如果里边的字母数量是奇数,那么直接返回false;
unordered_map<char,char> pairs{
{')', '('},
{']', '['},
{'}', '{'}
};
vector<char> stk;//一个容器
for(auto ch:s){
if( pairs.count(ch) ){//是右括号,是pairs的第一行;
if( stk.empty()||stk.back()!=pairs[ch] ){//第一行对应的第二行;
//看数组stk中第一个元素是否可与其相匹配;
//如果队列为空 或者 队列顶部与要找的左括号不对应,返回false;
return false;
}else{
stk.pop_back();
}
}else{ //是左括号;
stk.push_back(ch);
}
}
return stk.empty()?true:false;
}
};