挺有意思的。
给定的不是一种括号,而是三种括号,虽然没有考虑三种之间的优先级,不过也不能用之前的方法一下搞出来。从头到尾扫描字符串,遇到左括号,无论是哪一种,都直接压入栈中,当遇到一个是一个右括号,要看看栈顶是不是跟他匹配的那个左括号,如果是的话,就出栈,要么,就说明出错了。至于是不是匹配的括号,我是用一个map来看的。
我当时写的时候思路不如这个清晰,写的还有点乱。
class Solution {
public:
bool isValid(string s) {
map<char, char> cha;
stack<char> ms;
cha['('] = ')'; cha[')'] = '#';
cha['{'] = '}'; cha['}'] = '#';
cha['['] = ']'; cha[']'] = '#';
if(s.length()<2)
return false;
ms.push(s[0]);
for(int i=1;i<s.length();i++){
if(!ms.empty()&&cha[ms.top()] == s[i])
ms.pop();
else if(cha[s[i]] == '#')
return false;
else
ms.push(s[i]);
}
if(ms.empty())
return true;
else
return false;
}
};