LeetCode20. 有效的括号(栈的使用-括号匹配题)

之前在区块链面试中也遇到过,今天又看到它了,就简单记录一下吧。

 代码如下:

 1 //
 2 // Created by tusxxw on 2020/7/17.
 3 //
 4 /**
 5 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
 6 
 7 有效字符串需满足:
 8 
 9 左括号必须用相同类型的右括号闭合。
10 左括号必须以正确的顺序闭合。
11 注意空字符串可被认为是有效字符串。
12 
13 示例 1:
14 
15 输入: "()"
16 输出: true
17 示例 2:
18 
19 输入: "()[]{}"
20 输出: true
21 
22 来源:力扣(LeetCode)
23 链接:https://leetcode-cn.com/problems/valid-parentheses
24 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
25  */
26 
27 #include <string>
28 #include <iostream>
29 
30 using namespace std;
31 
32 class Solution {
33 public:
34     bool isValid(string s) {
35         const int len = s.size();
36         int rear = len -1;
37         int stack[len+2];//栈  简单题自己就数组模拟栈比STL中的stack要省时间的多
38         int top = 0;
39         for (int i = 0; i < len; ++i) {
40             //如果等于左括号就压栈
41             if(s[i] == '(' || s[i] == '[' || s[i] == '{') {
42                 stack[top++] = s[i];//压栈
43             }else if(s[i] == ')') {
44                 if(top == 0) return false;
45                 if(stack[top-1] == '('){
46                     top--;
47                 } else {
48                     return false;
49                 }
50             }else if(s[i] == ']') {
51                 if(top == 0) return false;
52                 if(stack[top-1] == '['){
53                     top--;
54                 } else {
55                     return false;
56                 }
57             }else if(s[i] == '}') {
58                 if(top == 0) return false;
59                 if(stack[top-1] == '{'){
60                     top--;
61                 } else {
62                     return false;
63                 }
64             }
65         }
66         if(top == 0) {
67             return true;
68         }else {
69             return false;
70         }
71     }
72 };
73 int main(){
74     Solution s;
75     bool res = s.isValid("()()[]{}");
76     cout<<res;
77     return 0;
78 }
原文地址:https://www.cnblogs.com/xwxz/p/13329888.html