题目
给定一个字符串,仅包含字符 (, ), {, }, [ 和 ],判断输入的字符串是否有效。
括号的开闭必须有序,如 () 和 ()[]{} 有序,但 (] 和 ([)] 无序。
难度:容易
编程语言:C++
分析
程序框架为:
1 2 3 4 5 6 
  | class Solution { public:     bool isValid(string s) {              } }; 
  | 
 
有效的括号 string 的结构是先入后出,所以思路是使用一个 stack,如果当前字符是 (, [ 或 {,则入栈。如果当前字符是 ), ] 或 },则检查栈顶元素是否匹配,如果匹配就出栈,继续遍历 s,不匹配则 return false。如果遍历完整个 s,栈里还有元素,则 return false,没有元素则 return true。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 
  | #include <frequently-used-code-snippets.h> class Solution { public:     bool isValid(string s) {         stack<char> bracketStack;         for (int i = 0; i < s.length(); i++) {             char c = s[i];             if (c == '(' || c == '[' || c == '{') {                 bracketStack.push(c);                 continue;             }             if (c == ')' &&                 ! bracketStack.empty() &&                 bracketStack.top() == '(') {                 bracketStack.pop();                 continue;             }             if (c == ']' &&                 ! bracketStack.empty() &&                 bracketStack.top() == '[') {                 bracketStack.pop();                 continue;             }             if (c == '}' &&                 ! bracketStack.empty() &&                 bracketStack.top() == '{') {                 bracketStack.pop();                 continue;             }             return false;         }         return bracketStack.empty();     } }; int main() {     Solution sol;     cout << sol.isValid("()") << endl;     cout << sol.isValid("(]{)") << endl;     cout << sol.isValid("()[]{}") << endl;     cout << sol.isValid("([)]{}") << endl;     cout << sol.isValid("[") << endl;     cout << sol.isValid("]") << endl; } 
  | 
 
提交到 Leetcode,Accepted! :) 运行时间为 0ms。