题目链接:
思路
括号匹配问题,利用栈的特性,遇到左括号如‘(’,‘[’‘{’,将对应的右括号入栈,要出栈的数据一定与栈顶数据匹配(如对于上面一定是‘}’,‘]’,‘)’),不匹配就不是有效的括号。
代码
class Solution {
public:
bool isValid(string s) {
stack<char> st;
for (int i = 0; i < s.size(); ++i)
{
//1.三种情况下,将对应的有括号入栈
if (s[i] == '(')
{
st.push(')');
}
else if (s[i] == '{')
{
st.push('}');
}
else if (s[i] == '[')
{
st.push(']');
}
//2.出栈时一定要判空,在没遍历完数组的情况下栈为空一定不匹配
//出栈是栈顶数据与s[i]不相等也一定不匹配
else if (st.empty() || s[i] != st.top())
{
return false;
}
//3.s[i]与栈顶数据相等则出栈
else
{
st.pop();
}
}
//4.遍历完数组后栈为空则括号匹配
return st.empty();
}
};