Problem discription
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.
Accpted Code:
1 class Solution {
2 public:
3 bool isValid(string s) {
4 map<char, char> brackets;
5 brackets['{'] = '}';
6 brackets['['] = ']';
7 brackets['('] = ')';
8 // use a stack to store every left brackets
9 stack<char> leftBracket;
10 // length of s
11 int len = (int)s.length();
12
13 for (int i = 0; i < len; i++) {
14 if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
15 leftBracket.push(s[i]);
16 } else {
17 // there is no left bracket
18 if (leftBracket.empty()) return false;
19 char last = leftBracket.top();
20 // the previous left bracket doesn't match s[i]
21 if (brackets[last] != s[i]) return false;
22 leftBracket.pop();
23 }
24 }
25 // if there are some brackets left
26 // not used(no right brackets to match them)
27 return leftBracket.empty();
28 }
29 };