Given a string containing just the characters '('
, ')'
, '{'
, '}'
, '['
and ']'
, determine if the input string is valid.
The brackets must close in the correct order, "()"
and "()[]{}"
are all valid but "(]"
and "([)]"
are not.
思路:
(1)扫描字符串,遇到左括号(‘(’ 、‘[’、‘{’),直接入栈,
(2)遇到右括号,首先扫描栈是否为空,
(a)为空,则直接返回false
(b)如果不为空,则比较栈顶元素与当前元素是否匹配,
I.不匹配,则返回false,
II.匹配,则栈顶元素出栈,继续扫描下一元素。
(3)扫描完字符串,若栈为空则返回true,否则返回false。
class Solution {
public:
bool isValid(string s)
{
stack<char>mystack;
int n = s.size();
for(int i = 0;i < n;i++)
{
if(s[i] == '(' || s[i] == '[' || s[i] == '{')
mystack.push(s[i]);
else
{
if(mystack.empty())
return false;
else if(')' == s[i])
{
if(mystack.top() == '(')
mystack.pop();
else
return false;
}
else if(']' == s[i])
{
if(mystack.top() == '[')
mystack.pop();
else
return false;
}
else
{
if(mystack.top() == '{')
mystack.pop();
else
return false;
}
}
}
if(mystack.empty())
return true;
else
return false;
}
};