题目描述
下面这种情况也是正确的
分析
这是括号的匹配问题,这是用栈来解决的经典问题
下面来说一下我的思考过程以及总结
上面的这5种示例就是括号与括号之间进行匹配,看看这个是true或者false
我们可以这样思考,遇到括号匹配的消除掉,不匹配的留下,那么匹配的话会为空,不匹配的话就不是空的,那么如何实现我们的这个想法呢,栈是一种很好的工具,正好可以将匹配的消除,不匹配的留下。
这里有个小技巧就是在左括号入栈的时候将右括号入栈,那么到时候进行匹配的时候判断相等即可,要不判断会很麻烦
代码实现
class Solution {
public:
bool isValid(string s) {
stack<char> st;
// 奇数不可能匹配直接false
if(s.size()%2 != 0)
{
return false;
}
for(int i=0; i<s.size(); i++)
{
if(s[i] == '(')
{
st.push(')');
}else if(s[i] == '{')
{
st.push('}');
}else if(s[i] == '[')
{
st.push(']');
}else if(st.empty() || s[i] != st.top())
{
return false;
}else
{
st.pop();
}
}
return st.empty();
}
};