思路:
栈适用于解决匹配之类的问题,在学习数据结构的时候老师讲过,用栈实现简易计算器的题目中也有所练习,所以应该能想到这个题用stack解决。
题目中2.必须以正确的顺序闭合就是如果输入的是([,那么闭合的顺序必须是]),反了就不行。
所以大体思路就是只让左括号入栈,遇到了右括号就与栈顶元素匹配判断出栈,最后如果ok的话栈内应该是没有元素的,这个时候返回true,不然返回false。
之后再来看小的细节,一个就是如果右括号数量多了,比如"]",一开始就是右括号,而这个时候栈内是没有元素的,自然不能进行top和pop操作,如果是这种情况直接返回false,另外,如果括号不匹配也返回false。
代码如下:
class Solution {
public:
bool isValid(string s) {
stack<char> stk;
for(int i = 0; i < s.size(); i++)
{
if(s[i] == '(' || s[i] == '{' || s[i] == '[')
stk.push(s[i]);
else
{
if(stk.empty())
return false;
char top = stk.top();
if(top == '(' && s[i] == ')'
|| top == '[' && s[i] == ']'
|| top == '{' && s[i] == '}')
stk.pop();
else
return false;
}
}
if(stk.empty())
return true;
else return false;
}
};