解题思路:
\qquad
本题最难的点是想到用栈来解决。想到栈以后,事情就变得简单了。
\qquad
如果是左括号('(','[','{'
)将其压入栈中,若为右括号(')',']','}'
)则检查栈顶元素是否与之匹配,匹配则将其出栈,否则返回字符串无效。最后检查栈是否为空,为空时字符串有效。
\qquad
代码部分可以改进的点,在于可以借助map
将左右括号做一个快速映射,代码看起来更精简些。
bool isValid(string s) {
if(s.size() % 2 == 1) return false;
stack<char> stk;
unordered_map<char, char> pair = {{')', '('}, {'}', '{'}, {']', '['}};
for(char ch : s)
{
if(pair.count(ch))
{
if(!stk.empty() && stk.top() == pair[ch])
{
stk.pop();
}
else return false;
}
else
{
stk.push(ch);
}
}
return stk.empty();
}