当前位置: 首页 > news >正文

栈的应用:括号匹配问题_有效的括号

假设表达式中允许包含两种括号:圆括号和方括号,嵌套顺序要求:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

考虑下列括号序列:
image.png
分析如下:

  1. 计算机接收到第一个‘[’后,期待与之匹配的第八个‘]’的出现
  2. 获得了第二个‘(’,此时第一个‘[’暂时先放到一边,并期待着与之匹配的第七个‘)’出现
  3. 获得了第三个‘[’后,此时第二个先暂时放到一边,并期待与之匹配的第四个‘]’出现
  4. 第四个出现后,第三个的期待得到满足,消解之后,第二个‘(’的期待又称为当前的当务之急
  5. 以此类推……

思想如下:

  1. 创建一个空栈,顺序读入括号
  2. 如果是左括号,则作为一个新的更急迫的期待压入栈中,自然使得原有的栈中所有未消解的期待的急迫性降了一级
  3. 如果是右括号,则要么使置于栈顶的最急迫的期待得到满足,要么是不合法的情况(括号序列不匹配,退出程序)
  4. 算法结束时,栈为空;否则括号序列不匹配

image.pngimage.pngimage.png
image.pngimage.pngimage.png

bool bracketCheck(char str[],int length){SqStack S;InitStack(S);for(int i=0;i<length;i++){if(str[i]=='('||str[i]=='['||str[i]=='{'){Push(S,str[i]);//扫描到左括号,入栈}else{if(isEmpty(S)){return false;//如果此时栈空了,却匹配到了右括号}//如果栈非空char topElem;//栈顶元素Pop(S,topElem);//获取栈顶元素if(str[i]==')'&&topElem!='('){return false;}if(str[i]=='['&&topElem!=']'){return false;}if(str[i]=='{'&&topElem!='}'){return false;}}}return isEmpty(S);//如果最后栈中非空,说明还有左括号没有得到匹配
}

相关文章:

  • 防御保护---防火墙的智能选路
  • 机器学习入门-----sklearn
  • 《幻兽帕鲁》好玩吗?幻兽帕鲁能在Mac上运行吗?
  • torch训练简单例子
  • C语言入门到精通之练习37:输入3个数a,b,c,按大小顺序输出。
  • AES加密原理
  • LeetCode 每日一题 2024/1/29-2024/2/4
  • 突破编程_C++_面试(基础知识(5))
  • 正点原子--STM32定时器学习笔记(2)
  • CSS Day11- 动画
  • Redis抓取数据到Logstash再推到Elasticsearch集群
  • 【Linux Day15 TCP网络通讯】
  • (bean配置类的注解开发)学习Spring的第十三天
  • 一文详解RTSP协议:流媒体传输控制协议
  • AtCoder Beginner Contest 338 G. evall(枚举+递推 统计贡献)
  • [nginx文档翻译系列] 控制nginx
  • 【技术性】Search知识
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • HTML-表单
  • Python_OOP
  • python学习笔记 - ThreadLocal
  • SpiderData 2019年2月13日 DApp数据排行榜
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 安卓应用性能调试和优化经验分享
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 对超线程几个不同角度的解释
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 今年的LC3大会没了?
  • 配置 PM2 实现代码自动发布
  • 前端技术周刊 2019-01-14:客户端存储
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 06-01 点餐小程序前台界面搭建
  • elasticsearch-head插件安装
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • (02)Hive SQL编译成MapReduce任务的过程
  • (70min)字节暑假实习二面(已挂)
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (利用IDEA+Maven)定制属于自己的jar包
  • (转)h264中avc和flv数据的解析
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • ../depcomp: line 571: exec: g++: not found
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .net core使用ef 6
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET建议使用的大小写命名原则
  • @angular/cli项目构建--http(2)
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • [2018-01-08] Python强化周的第一天