解题思路
栈 + unordered_map<char,char>
20. 有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
1. 左括号必须用相同类型的右括号闭合。
2. 左括号必须以正确的顺序闭合。
- 栈:先进后出的特性,来实现左括号和右括号的闭合。
unordered_map<char,char>
来记录{(
,)
}、{[
,]
}、{{
,}
}
class Solution {
public:
bool isValid(string s) {
int len = strlen(s.c_str());
if(len%2!=0){return false;} // 奇数不可能对称;
unordered_map<char,char> srcStrMap = {
{'(',')'},
{'[',']'},
{'{','}'}
};
stack<char> tmpStack;
for(int idx=0;idx<len;++idx)
{
auto iter = srcStrMap.find(s[idx]);
if(iter != srcStrMap.end()){
tmpStack.push(s[idx]);
}else{
if(tmpStack.empty()){return false;}
auto stackIter = srcStrMap.find(tmpStack.top());
if(stackIter->second != s[idx]){
return false;
}
tmpStack.pop();
}
}
return tmpStack.empty();
}
};