这个代码是我自己写的

是对QDU周强老师的一个题写出来的

(())四个字符标号为1234,我们让24配对,13也是配对的,这个道理,我们应该明确

算法逻辑:将字符串中的左右括号的数组下标分别存放在两个stack中,我们可以知道,栈顶元素的值就是该栈的最大值,要想配对,左括号的下标一定要小于右括号的下标,所以,一旦有一个左括号的下标大于了右括号栈顶的下标,就一定没有与其匹配的括号,即这段字符串的括号是不匹配的

#include<cstdio>
#include<iostream>
#include<stack>
#include<string>
using namespace std;
stack<int> small_left;
stack<int> small_right;
stack<int> mid_left;
stack<int> mid_right;
stack<int> big_left;
stack<int> big_right;
string line;
bool Handle(int c)
{if(c == 1){int left_len;int right_len;left_len = small_left.size();right_len = small_right.size();if(left_len == right_len){bool flag = true;while(!small_left.empty()){if(small_left.top() > small_right.top()){flag = false;break;}else{small_left.pop();small_right.pop();}}return flag;}else return false;}else if(c==2){int left_len;int right_len;left_len = mid_left.size();right_len = mid_right.size();if(left_len == right_len){bool flag = true;while(!mid_left.empty()){if(mid_left.top() > mid_right.top()){flag = false;break;}else{mid_left.pop();mid_right.pop();}}return flag;}else return false;}else{int left_len;int right_len;left_len = big_left.size();right_len = big_right.size();if(left_len == right_len){bool flag = true;while(!big_left.empty()){if(big_left.top() > big_right.top()){flag = false;break;}else{big_left.pop();big_right.pop();}}return flag;}else return false;}
}
int main()
{int left = 0;int right = 0;getline(cin,line);for(int i = 0; i < line.length(); i++){if(line[i] == '('){small_left.push(i);left++;}else if(line[i] == ')'){small_right.push(i);right++;}else if(line[i] == '['){mid_left.push(i);left++;}else if(line[i] == ']'){mid_right.push(i);right++;}else if(line[i] == '{'){big_left.push(i);left++;}else if(line[i] == '}'){big_right.push(i);right++;}}bool flag1 = Handle(1);bool flag2 = Handle(2);bool flag3 = Handle(3);cout<<left<<" "<<right<<endl;if(flag1 && flag2 && flag3)cout<<"YES"<<endl;else cout<<"NO"<<endl;return 0;
}

但是这段代码可能存在小bug,错了一个点,过几天我再来填坑

用stack实现括号匹配相关推荐

  1. 栈(Stack),轻松解决数制转换和括号匹配问题!

    http://data.biancheng.net/view/9.html 栈,线性表的一种特殊的存储结构.与学习过的线性表的不同之处在于栈只能从表的固定一端对数据进行插入和删除操作,另一端是封死的. ...

  2. python中用函数设计栈的括号匹配问题_数据结构和算法(Python版):利用栈(Stack)实现括号的匹配问题...

    算法 数据结构 数据结构和算法(Python版):利用栈(Stack)实现括号的匹配问题 在平时写程序当中,我们会经常遇到程序当中括号的匹配问题,也就是在程序当中左括号的数量和右括号的数量必须相等.如 ...

  3. c语言括号匹配的检验,检验括号匹配的算法

    用栈实现检验括号匹配的算法没啥具体描述,数据结构的知识,急用,有重赏 思想是 先进栈,获取第一个半边括号,标记一下,继续进栈直到获取到第二个与之匹配的另一外括号,然后出栈,取出内容.就这样.. 数据结 ...

  4. 栈 -- 顺序栈、链式栈的实现 及其应用(函数栈,表达式求值,括号匹配)

    文章目录 实现 顺序栈实现 链式栈实现 应用 函数栈 的应用 表达式求值中 的应用 括号匹配中 的应用 我们使用浏览器的时候经常会用到前进.后退功能. 依次访问完一串页面 a – b – c之后点击后 ...

  5. P1944 最长括号匹配(栈模拟/DP)

    P1944 最长括号匹配 可以直接用栈模拟,把匹配好的标记一下, 最后找到最长的匹配输出即可. 如果是要求最长的长度的题那么只需要求数就行了,没必要把原序列真的按照题意改变 如果要求序列,那么只需要按 ...

  6. 2.2栈的另一个应用:括号匹配

    2.2栈的另一个应用:括号匹配 1.LeetCode官网 美网:https://leetcode.com/ 中文网 :https://leetcode-cn.com/ 英语不咋地,所以选择此处选择中文 ...

  7. python 栈_Python数据结构与算法05:基本结构:栈的应用之括号匹配

    注:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性. 本文阅读时间约为7分钟. 算法流程 括号匹配情况介绍 我们经常会遇到类似(9-1)*(8+7)/(4-2).print(& ...

  8. java 括号匹配_java---括号匹配

    import java.util.HashMap; import java.util.LinkedList; import java.util.Map; /* *括号匹配 * 1.用栈实现,如果读取字 ...

  9. CCF NOI1113 括号匹配

    问题链接:CCF NOI1113 括号匹配. 时间限制: 1000 ms  空间限制: 262144 KB 题目描述 给定一个只包含左右括号的合法括号序列,按右括号从左到右的顺序输出每一对配对的括号出 ...

  10. hdu4915 判断括号匹配

    题意:       问你括号匹配是否唯一,三种字符'(','?',')',问号可以变成任何字符. 思路:       首先我们要学会判断当前串是否成立?怎么判断?我的方法是跑两遍,开三个变变量 s1 ...

最新文章

  1. css中绝对定位中的left和top属性
  2. gradle仓库配置
  3. Java并发编程:Java内存模型JMM
  4. 智慧城市监控照明物联网管理系统应用分析
  5. ElementUI中的el-form怎样格式化显示1和0为是和否
  6. Nacos client SDK 订阅式请求坑
  7. 开源贡献 计算_使用此网站为开源做贡献
  8. C# 匿名方法及Lambda表达式
  9. 【特征选择】特征选择的通俗讲解!
  10. 一路风景之川藏线徒步笔记
  11. 机器学习:使用梯度下降实现逻辑回归求解多元分类问题的原理
  12. 2022年系统分析师论文模拟题--押题
  13. iis aspnet_iisreg.exe 0x8007000B
  14. c++输入回车结束循环_C++ cin如何输入回车停止
  15. 最新vue实战视屏 vue2.x thinkPHP5.0后台 nodejs+mong0DB
  16. win10系统显示打印机未连接到服务器,Win10系统连接打印机显示未指定设备的解决教程...
  17. 文件操作之不得不知的细节
  18. [转帖]AMOLED的技术和OLED有哪些联系和区别
  19. python模拟蚂蚁森林能量产生过程代码_用Python实现定时自动化收取蚂蚁森林能量,再也不用担心忘记收取了...
  20. ubuntu、win跨平台局域网文件传输工具

热门文章

  1. android root su sticky bit
  2. 十大著名黑客——斯蒂芬-沃兹尼克
  3. mysql里的数据输入窗口是哪个_WINDOWS下使用Mysql 中碰到的问题记录
  4. 拓端tecdat|R语言多维数据层次聚类散点图矩阵、配对图、平行坐标图、树状图可视化城市宏观经济指标数据
  5. 图像处理-自适应的二值化图像
  6. php未定义常量破解,如何使PHP未定义的常量注意到错误
  7. java ilvmanagerview_创建一个多行的tooltip
  8. Caffe学习1-图像识别与数据可视化
  9. Caffe傻瓜系列(7):solver优化方法
  10. 服务器真在运行中,win7电脑服务器正在运行中的解决教程