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.
class Solution {
public:
bool isValid(string s) {
int length = s.size();
bool validstring = false;
std::stack<int> latests;
for (int i = 0; i < length; i++)
{
switch (s[i]){
case '(':
latests.push(1);
break;
case '[':
latests.push(2);
break;
case '{':
latests.push(3);
break;
case ')':
if (latests.empty())
return validstring = false;
if (latests.top() == 1)
{
latests.pop();
break;
}
else
validstring = false;
return validstring;
case ']':
if (latests.empty())
return validstring = false;
if (latests.top() == 2)
{
latests.pop();
break;
}
else
validstring = false;
return validstring;
case '}':
if (latests.empty())
return validstring = false;
if (latests.top() == 3)
{
latests.pop();
break;
}
else
validstring = false;
return validstring;
}
}
if (latests.empty())//空栈证明所有前括号都有结尾,栈顺序保证符号顺序
{
validstring = true;
}
return validstring;
}
};
bool isValid(string s) {
int length = s.size();
bool validstring = false;
std::stack<int> latests;
for (int i = 0; i < length; i++)
{
switch (s[i]){
case '(':
latests.push(1);
break;
case '[':
latests.push(2);
break;
case '{':
latests.push(3);
break;
case ')':
if (latests.empty()||latests.top() != 1)
return validstring = false;
latests.pop();
break;
case ']':
if (latests.empty() || latests.top() != 2)
return validstring = false;
latests.pop();
break;
case '}':
if (latests.empty() || latests.top() != 3)
return validstring = false;
latests.pop();
break;
}
}
if (latests.empty())
{
validstring = true;
}
return validstring;
}