COJ 1065括号匹配:栈的简单应用
2013-09-28 16:11
691 查看
[STL]【数据结构】括号匹配
Time Limit: 1000 ms Memory Limit: 65536 KBTotal Submit: 43 Accepted: 11
Description
数据有一行,由(,),[,],{,}六种字符构成。现在判断这行括号是否合法,合法条件如下:
1、每个左括号都有对应的右括号匹配,不得有多余的括号,比如这样正确:{}(),但这样错误:()())
2、不同类型括号之间不可以交错,比如这样正确:{[]},但这样错误:{[}]
Input
一行,只有六种括号字符
Output
括号合法输出:YES
括号不合法输出:NO
Sample Input
Sample Input 1:
{}{}{}()(){[]}
Sample Input 2:
{}[]]{[})())
Sample Output
Sample Output 1:
YES
Sample Output 2:
NO
Hint
栈
如采用逐个字符输入时,建议使用getchar();
<stack>
思路:被getchar一直TLE,后面改用字符串输入就得过了,真是很无语有木有!!!暗示居然还是个陷阱……唉……中间也没看好题目,理解错了又错了几次,刚开始还以为{[}]这样也属于匹配的,后面重新看题目了才知道理解错了,一直纠结这事……
#include<iostream> #include<stack> #include<cstdio> #include<cstring> using namespace std; int cmp(char a,char b) { if(a=='{'&&b=='}') return 1; if(a=='('&&b==')') return 1; if(a=='['&&b==']') return 1; return 0; } int main() { stack<char>s; char c[101]; int i,l; scanf("%s",c); l=strlen(c); for(i=0;i<l;i++) { if(!s.empty()&&cmp(s.top(),c[i])) s.pop(); else s.push(c[i]); } if(!s.empty()) printf("NO\n"); else printf("YES\n"); return 0; }
相关文章推荐
- 栈的简单应用(数制转换、括号匹配检验、行编辑、迷宫求解)
- 简单栈的应用之括号匹配
- 数据结构-C语言 栈的简单应用——括号匹配
- 括号匹配(一) 栈的应用
- 一道简单到无名却又WA了半天的题--括号匹配
- java堆栈应用之括号匹配
- 堆栈小应用(一):括号匹配程序
- 栈的应用,实现简单的不带括号的四则运算
- 简单的括号匹配问题,只有 ( 和 )。。。其实原理就是开栈最后的状态。。。
- 用Emgu CV模板匹配等一些简单应用
- 数据结构(1)——顺序栈的实现,以及括号匹配的应用
- 栈的应用之括号匹配
- 栈的应用--括号匹配的检验
- 栈的应用之括号的匹配Java语言描述
- java--一道简单的括号匹配问题
- 栈的应用--九度1153.括号匹配问题
- 栈的应用 (数制转换和括号匹配)
- 栈的应用之括号的匹配
- 2. 栈的两个应用:括号匹配和表达式的计算。
- 链栈的简单实现及括号匹配问题的链栈解决方法