博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【题解】大中小括号匹配
阅读量:6717 次
发布时间:2019-06-25

本文共 1564 字,大约阅读时间需要 5 分钟。

题目描述

假设表达式中允许四种括号:<>、()、[]、{},它们的优先次序是由小到大的。其嵌套必须满足优先次序由大到小,例如:[()]或者{}或(())等都为正确的匹配。形如:([])或([)]均为错误的匹配。

编写程序判断所给的括号串是否匹配。若匹配,则输出“YES”,否则输出“NO”。

输入输出格式

输入格式:

第一行有一个数值N,它的范围是 [1...100]。

接下来有N行字符串,它是由小写字母,运算符和左右小圆括号构成,字符串长度小于255。

输出格式:

N行,输出对应行的应表达式括号是否匹配。

输入输出样例

输入样例:
5{}{}<><>()()[][]{
{}}{
{}}<<>><<>>(())(())[[]][[]]{
{}}{
{}}<<>><<>>(())(())[[]][[]]{<>}{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]><}{
{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]
输出样例:
YESYESYESYESNO 这道题可以用栈来做,先把每个括号的优先级用数字放入栈中,一边放一边判断是否匹配,如果进入的括号的优先级大于原来栈中括号的优先级,就说明不匹配,如果括号匹配,就清除原来栈的顶部 具体程序如下:
#include
#include
#include
#include
using namespace std;string str;int n,v,now;stack
s;int main(){ scanf("%d",&n); char ch=cin.get(); for(register int i=1;i<=n;++i) { v=0; getline(cin,str); for(register int j=0;j
') now=11; if(str[j]=='(') now=2; if(str[j]==')') now=12; if(str[j]=='[') now=3; if(str[j]==']') now=13; if(str[j]=='{ ') now=4; if(str[j]=='}') now=14; if(s.empty()&&now<10) { s.push(now); continue; } else if(now>10&&s.empty()) { printf("NO\n"); v=1; break; } else if(now-10==s.top()) { s.pop(); } else if(now>s.top()) { printf("NO\n"); v=1; break; } else s.push(now); } if(v==1) { while(!s.empty()) s.pop(); continue; } if(s.empty()) printf("YES\n"); else { printf("NO\n"); } while(!s.empty()) s.pop(); } }

 

 

转载于:https://www.cnblogs.com/2021-yanghaoran/p/10482913.html

你可能感兴趣的文章
高阶函数:声明、实现(定义)与调用
查看>>
splash 安装
查看>>
mysql数据库优化课程---15、mysql优化步骤
查看>>
数据库路由中间件MyCat - 使用篇(4)
查看>>
Java程序开发中的简单内存分析
查看>>
Java中的Future相关
查看>>
CGAL Catmull-Clark Subdivide Surface
查看>>
赛车入门 -- 专有技术名词
查看>>
接收IWebBrowser2的自动化事件
查看>>
需求入门: 需求工程=需求开发+需求管理
查看>>
androidmanifest.xml权限中文说明
查看>>
matlab练习程序(感知哈希对比图片)
查看>>
多媒体指令(图像灰度化)
查看>>
sqlserver数据库大型应用解决方案总结
查看>>
枚举系统设备
查看>>
C#形参,实参,值传递参数,引用传递参数,输出参数,参数数组的学习
查看>>
在Salesforce中创建Approval Process
查看>>
.NET v2.0 下的高精度计数器 —— Stopwatch [.NET v2.0, C#]
查看>>
Remoting入门实例
查看>>
MongoDB的使用
查看>>