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.
bool isValid(string s) {
left = { '(', '{', '[' };
vector<char> right = { ')', '}', ']' };
stack<char> sc;
for (int i = 0; i < s.length(); i++) {
if (std::find(left.begin(), left.end(), s[i] ) != left.end()) { sc.push(s[i]); continue;}
vector<char>::iterator it = std::find(right.begin(), right.end(), s[i]);
if( it == right.end()) { continue;}
if (sc.empty() || sc.top() != left[it - right.begin()]) { return false; }
sc.pop();
}
return sc.empty();
}
下面这种代码或许更加简洁:
bool isValid(string s) {
stack<char> sc;
for( char c : s) {
if( c == '[' || c == '(' || c == '{') { sc.push(c);continue;}
else if( c == ']' || c == ')' || c == '}') {
if(sc.empty()) return false;
if( c == ']' && sc.top() != '[') return false;
if( c == ')' && sc.top() != '(') return false;
if( c == '}' && sc.top() != '{') return false;
sc.pop();
}
}
return sc.empty();
}