题目描述

请写一个程序,判断给定表达式中的括号是否匹配,表达式中的合法括号为”(“, “)”, “[", "]“, “{“, ”}”,这三个括号可以按照任意的次序嵌套使用。

输入

有多个表达式,输入数据的第一行是表达式的数目,每个表达式占一行。

输出

对每个表达式,若其中的括号是匹配的,则输出”yes”,否则输出”no”。

样例输入 复制

4
[(d+f)*{}]
[(2+3))
()}
[4(6]7)9

样例输出 复制

yes
no
no
no

分析:

由于题目要求时括号匹配,因此只需要识别字符是否为左、右括号,并利用一个栈来存储之前的左括号(根据先入后出的性质),每次遇到左括号,压入栈;遇到右括号,若栈空,则匹配失败,若栈不空,则弹出栈顶的左括号进行匹配,失败则结束,成功则继续匹配。

要点:

  1. 输入的字符匹配完,还要去判断栈是否为空,因为还有可能存在未匹配的左括号。

#include <iostream>
#include <string>
#include <stack>using namespace std;bool isleft(char s){return s == '(' || s == '[' || s == '{';
}
bool isright(char s){return s == ')' || s == ']' || s == '}';
}
bool Pair(char a, char b){if(a == '(' && b == ')') return true;if(a == '{' && b == '}') return true;if(a == '[' && b == ']') return true;return false;
}int main()
{int n;while(cin >> n){cin.get();string s;for(int i = 0; i < n; i++){getline(cin, s);stack<char> st;bool flag = true;for(int j = 0; j < s.length(); j++){if(isleft(s[j])){st.push(s[j]);}else if(isright(s[j])){if(!st.empty()){char op = st.top();st.pop();if(!Pair(op, s[j])){flag = false;break;}}else{flag = false;break;}}}if(!st.empty()){flag = false;}if(flag){cout << "yes\n";}else{cout << "no\n";}}}return 0;
}

【栈】问题 B: Problem E相关推荐

  1. 数学文化/数据结构知识题

    题目一: 不同的出栈顺序数  Problem Description X星球特别讲究秩序,所有道路都是单行线.一个甲壳虫车队,共16辆车,按照编号先后发车,夹在其它车流中,缓缓前行. 路边有个死胡同, ...

  2. CF data structure 自制题单(一)

    CF data structure 2000~2100 为你的战斗,献上雷鸣般的喝彩!--唔姆 目标 30 道题 1. Problem - 1555E - Codeforces 看了提示 给一些线段, ...

  3. NYOJ 150 Train Problem I STL栈

    Train Problem I 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 As the new term comes, the Ignatius Train Sta ...

  4. 【HDU - 1022】Train Problem I (栈模拟,水题,思维)

    题干: As the new term comes, the Ignatius Train Station is very busy nowadays. A lot of student want t ...

  5. Problem D: 栈的基本运算(栈和队列)

    Problem D: 栈的基本运算(栈和队列) Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 43  Solved: 15 [Submit][Stat ...

  6. Problem C: 括号匹配(栈和队列)

    Problem C: 括号匹配(栈和队列) Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 76  Solved: 18 [Submit][Status ...

  7. Problem A: 判断操作是否合法(栈和队列)

    Problem A: 判断操作是否合法(栈和队列) Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 67  Solved: 22 Description ...

  8. train problem I (栈水题)

    杭电1002http://acm.hdu.edu.cn/showproblem.php?pid=1022 Train Problem I Time Limit: 2000/1000 MS (Java/ ...

  9. fzoj Problem 2190 非提的救赎 【单调栈】

    题目链接:fzoj Problem 2190 非提的救赎 Problem 2190 非提的救赎 Accept: 106 Submit: 312 Time Limit: 1000 mSec Memory ...

  10. HDU 1022[Train Problem I] 栈的应用

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1022 题目大意:一列序列为s1的车厢是否能通过车站的中转以序列s2出站.白皮上有. 关键思想:栈的应用 ...

最新文章

  1. python 将列和索引的值变换_【编辑小组成长日记】Python学习第二期
  2. Centos nginx 安装 源码方式安装
  3. 今天已经算一下过来有一个礼拜了,还是感觉是在熬日子似的
  4. Swift编程语言学习10—— 枚举属性监视器
  5. 结构 win32_COM编程攻略(十五 持久化与结构化存储)
  6. 跟随鼠标走的文字的html代码,跟随鼠标走的文字的HTML代码
  7. 如何允许用户自定义UI
  8. php毕设,php毕设
  9. 【Oracle】删除不存在表时避免报错
  10. 【PostgreSQL-9.6.3】分区表
  11. 【算法学习】Fast burst images denoising
  12. 计算机组成与体系结构——存储器分层体系结构
  13. 不用媒体查询做web响应式设计-遁地龙卷风
  14. 计算机技能大赛简报,网络攻防比赛简报
  15. [魔方]魔教秘籍4:《封王-易筋经》(概要)
  16. JAVAScript:mobile端,基于transform-origin和tranform(scale),实现表格缩放
  17. 《AngularJS深度剖析与最佳实践》一2.12 单元测试
  18. r软件 linux,分享|Linux 上好用的 R 语言 IDE
  19. 小程序自动化测试框架原理剖析
  20. NOI / 2.5基本算法之搜索-6044:鸣人和佐助详解

热门文章

  1. python程序员买西瓜代码_朴素贝叶斯python代码实现(西瓜书)
  2. 22万抢注“活动”双拼域名,95后创业者却因困意失之交臂
  3. 北京大学计算机社团,北京大学爱心社团
  4. C#,ArcGIS Engine开发入门教程
  5. proe5.0插件在windows7 64系统预览模型
  6. 即构推出视频见证系统方案,全面支持泛金融实时双录
  7. 关于scf文件与找回丢失的显示桌面图标
  8. 获取处于选中状态的checkbox的id值
  9. 019动物识别检测网页版
  10. iPhone 14连夜跌至4800元,现在应该直接入手14,还是等15?