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.
solution:用两个栈分别压入左括号和右括号,每遇到一个左括号则分别压入一对括号,每遇到一个右括号则分别调出栈顶,看是否右括号栈顶是否等于当前右括号并且是否为空,最后得到两个空栈则该括号串是valid,反之为invalid。
class Solution {
public:
bool isValid(string s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(s.length() == 0 && s == "")
return true;
else if(s.length()%2 != 0)
return false;
vector<char>lb; //left bracket
vector<char>rb; //right bracket
for(int index = 0 ; index < s.length(); index ++)
{
char bra = s.at(index);
switch(bra)
{
case '(':
{
char temp = ')';
lb.push_back(bra);
rb.push_back(temp);
}
break;
case '[':
{
char temp = ']';
lb.push_back(bra);
rb.push_back(temp);
}
break;
case '{':
{
char temp = '}';
lb.push_back(bra);
rb.push_back(temp);
}
break;
case ')':
{
if(lb.empty()||rb.empty())
return false;
char top = rb.back();
if(top == ')')
{
lb.pop_back();
rb.pop_back();
}
else
return false;
}
break;
case ']':
{
if(lb.empty()||rb.empty())
return false;
char top = rb.back();
if(top == ']')
{
lb.pop_back();
rb.pop_back();
}
else
return false;
}
break;
case '}':
{
if(lb.empty()||rb.empty())
return false;
char top = rb.back();
if(top == '}')
{
lb.pop_back();
rb.pop_back();
}
else
return false;
}
break;
default:
break;
}
}
if(lb.empty())
return true;
else
return false;
}
};