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 }
复制代码

 

posted @   小尾学长  阅读(265)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
点击右上角即可分享
微信分享提示