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; }