【基础练习】【栈】【映射】codevs3543 括号匹配题解
来源:互联网 发布:相似照片整理软件 编辑:程序博客网 时间:2024/05/16 14:52
本来这是一道水题,结果因为我有些大意,弄了一个小时···引以为戒。
这道题比较特殊的一点是四种括号如果存在嵌套必须按照一定的顺序嵌套。
放代码
//codevs3543 括号匹配#include<stack>#include<cstring>#include<cstdio>#include<map>using namespace std;map<char,int> low;stack<char> s;int n;bool ok=true;char a[256];int main(){freopen("1.txt","r",stdin);freopen("2.txt","w",stdout);low['<']=1;low['(']=2;low['[']=3;low['{']=4;low['>']=5;low[')']=6;low[']']=7;low['}']=8;//用map处理顺序问题,注意已有类型无法重载运算符;当然也可以函数+矩阵(from 里奥)scanf("%d",&n);for (int i=1;i<=n;i++){ok=true;scanf("%s",a);//注意没有&while (!s.empty()) s.pop();//清空栈int len=strlen(a);int j=0;while (j<len){char ch=a[j];if ((ch=='<')||(ch=='(')||(ch=='[')||(ch=='{')){if ((s.empty())||(low[ch]<=low[s.top()])){//需检验栈是否为空s.push(ch);} else{ok=false;break;}}else if ((!s.empty())&&(low[s.top()]==low[ch]-4)){s.pop();}else{ok=false;break;}j++;}if (!s.empty()) printf("NO\n");//栈不为空,说明有左边一半括号没有匹配的情况else if (ok) printf("YES\n");else printf("NO\n");}return 0;}
——总角之宴,言笑晏晏。信誓旦旦,不知其反。
1 0
- 【基础练习】【栈】【映射】codevs3543 括号匹配题解
- 【基础练习】【栈】codevs2058 括号匹配题解
- 括号匹配(栈练习)
- [算法基础练习]最长括号匹配
- 【基础练习】【区间DP】codevs3657 括号序列题解
- 括号匹配练习
- 【基础练习】【二分图匹配】【匈牙利算法】codevs1022 覆盖题解
- 栈 || 括号匹配(基础版)
- Java程序练习-括号匹配
- 编程练习3--括号匹配
- 华为机试练习---括号匹配问题
- 数据结构练习2——括号匹配
- 括号匹配——栈的基础应用1
- 栈---括号匹配
- 括号匹配(栈)
- [栈] 括号匹配问题
- 栈实例-括号匹配
- 栈实现括号匹配
- WatchKit 框架: 将应用程序从裤兜里取出来
- 查找和替换目录中所有文件中的某个字符串
- kettle登录加载job 报错 Can't find Job 1
- ffmpeg返回错误码
- 关于android相机 适配问题
- 【基础练习】【栈】【映射】codevs3543 括号匹配题解
- 使用Log4j时,为什么要写if (log.isDebugEnabled()) 或 if (log.isInfoEnabled())
- 2014-2015年终总结——做时间的主人
- wininet 实现ftp上传
- [LeetCode]Min Stack
- J2SE总结(一)-------容器
- Java日志框架介绍
- C总结-补充(6/6)
- Apache中多个HTTPS虚拟主机的实现