【栈】问题 B: Problem E
题目描述
请写一个程序,判断给定表达式中的括号是否匹配,表达式中的合法括号为”(“, “)”, “[", "]“, “{“, ”}”,这三个括号可以按照任意的次序嵌套使用。
输入
有多个表达式,输入数据的第一行是表达式的数目,每个表达式占一行。
输出
对每个表达式,若其中的括号是匹配的,则输出”yes”,否则输出”no”。
样例输入 复制
4
[(d+f)*{}]
[(2+3))
()}
[4(6]7)9
样例输出 复制
yes
no
no
no
分析:
由于题目要求时括号匹配,因此只需要识别字符是否为左、右括号,并利用一个栈来存储之前的左括号(根据先入后出的性质),每次遇到左括号,压入栈;遇到右括号,若栈空,则匹配失败,若栈不空,则弹出栈顶的左括号进行匹配,失败则结束,成功则继续匹配。
要点:
输入的字符匹配完,还要去判断栈是否为空,因为还有可能存在未匹配的左括号。
#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相关推荐
- 数学文化/数据结构知识题
题目一: 不同的出栈顺序数 Problem Description X星球特别讲究秩序,所有道路都是单行线.一个甲壳虫车队,共16辆车,按照编号先后发车,夹在其它车流中,缓缓前行. 路边有个死胡同, ...
- CF data structure 自制题单(一)
CF data structure 2000~2100 为你的战斗,献上雷鸣般的喝彩!--唔姆 目标 30 道题 1. Problem - 1555E - Codeforces 看了提示 给一些线段, ...
- NYOJ 150 Train Problem I STL栈
Train Problem I 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 As the new term comes, the Ignatius Train Sta ...
- 【HDU - 1022】Train Problem I (栈模拟,水题,思维)
题干: As the new term comes, the Ignatius Train Station is very busy nowadays. A lot of student want t ...
- Problem D: 栈的基本运算(栈和队列)
Problem D: 栈的基本运算(栈和队列) Time Limit: 1 Sec Memory Limit: 128 MB Submit: 43 Solved: 15 [Submit][Stat ...
- Problem C: 括号匹配(栈和队列)
Problem C: 括号匹配(栈和队列) Time Limit: 1 Sec Memory Limit: 128 MB Submit: 76 Solved: 18 [Submit][Status ...
- Problem A: 判断操作是否合法(栈和队列)
Problem A: 判断操作是否合法(栈和队列) Time Limit: 1 Sec Memory Limit: 128 MB Submit: 67 Solved: 22 Description ...
- train problem I (栈水题)
杭电1002http://acm.hdu.edu.cn/showproblem.php?pid=1022 Train Problem I Time Limit: 2000/1000 MS (Java/ ...
- fzoj Problem 2190 非提的救赎 【单调栈】
题目链接:fzoj Problem 2190 非提的救赎 Problem 2190 非提的救赎 Accept: 106 Submit: 312 Time Limit: 1000 mSec Memory ...
- HDU 1022[Train Problem I] 栈的应用
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1022 题目大意:一列序列为s1的车厢是否能通过车站的中转以序列s2出站.白皮上有. 关键思想:栈的应用 ...
最新文章
- python 将列和索引的值变换_【编辑小组成长日记】Python学习第二期
- Centos nginx 安装 源码方式安装
- 今天已经算一下过来有一个礼拜了,还是感觉是在熬日子似的
- Swift编程语言学习10—— 枚举属性监视器
- 结构 win32_COM编程攻略(十五 持久化与结构化存储)
- 跟随鼠标走的文字的html代码,跟随鼠标走的文字的HTML代码
- 如何允许用户自定义UI
- php毕设,php毕设
- 【Oracle】删除不存在表时避免报错
- 【PostgreSQL-9.6.3】分区表
- 【算法学习】Fast burst images denoising
- 计算机组成与体系结构——存储器分层体系结构
- 不用媒体查询做web响应式设计-遁地龙卷风
- 计算机技能大赛简报,网络攻防比赛简报
- [魔方]魔教秘籍4:《封王-易筋经》(概要)
- JAVAScript:mobile端,基于transform-origin和tranform(scale),实现表格缩放
- 《AngularJS深度剖析与最佳实践》一2.12 单元测试
- r软件 linux,分享|Linux 上好用的 R 语言 IDE
- 小程序自动化测试框架原理剖析
- NOI / 2.5基本算法之搜索-6044:鸣人和佐助详解
热门文章
- python程序员买西瓜代码_朴素贝叶斯python代码实现(西瓜书)
- 22万抢注“活动”双拼域名,95后创业者却因困意失之交臂
- 北京大学计算机社团,北京大学爱心社团
- C#,ArcGIS Engine开发入门教程
- proe5.0插件在windows7 64系统预览模型
- 即构推出视频见证系统方案,全面支持泛金融实时双录
- 关于scf文件与找回丢失的显示桌面图标
- 获取处于选中状态的checkbox的id值
- 019动物识别检测网页版
- iPhone 14连夜跌至4800元,现在应该直接入手14,还是等15?