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.
简单利用stack。
时间为0ms.
注意:当栈为空时,是不能检测栈顶的,因为此时根本没有栈顶,调试显示为进入非法区域。这点,容易忽略,切记切记!
/*
想法是,遇到左括号,全部进栈,遇到右括号,检查栈顶是否匹配,匹配,去掉栈顶,不匹配,进栈,直到string末尾,看栈是否为空,为空,合法,不为空,不合法。
*/
class Solution {
public:
bool isValid(string s) {
stack<char> mystack;
int len=s.length();
for(int i=0; i < len; i++)
{
if( s[i] == '(' || s[i] == '['|| s[i] == '{')
mystack.push(s[i]);
else if( s[i] == ')')
{
if(mystack.empty())
mystack.push(s[i]);
else
if( mystack.top() == '(')
mystack.pop();
else
mystack.push(s[i]);
}
else if( s[i] == ']')
{
if(mystack.empty())
mystack.push(s[i]);
else
if( mystack.top() =='[')
mystack.pop();
else
mystack.push(s[i]);
}
else if( s[i] == '}')
{
if(mystack.empty())
mystack.push(s[i]);
else
if( mystack.top() == '{')
mystack.pop();
else
mystack.push(s[i]);
}
}
if( !mystack.empty() )
return false;
else
return true;
}
};