括号匹配(){}[]({[]})
2016-04-08 02:17
316 查看
描述
现在,有一行括号序列,请你检查这行括号是否配对。输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出N
o
样例输入
3[(])
(])
([])
样例输出
No No Yes
栈:羽毛球筒,先放进去的球,后取出来
代码一:数组模拟栈(写的顺了)/************************************************************************* > File Name: test.cpp > Author: dulun > Mail: dulun@xiyoulinux.org > Created Time: 2016年04月07日 星期四 23时25分18秒 ************************************************************************/ #include<iostream> #include<stdio.h> #include<cstring> #include<cstdlib> #include<algorithm> #define LL long long using namespace std; const int N = 50086; char a ; char s ; int main() { int n; bool flag; cin>>n; while(n--) { memset(a, 0, sizeof(a)); memset(s, 0, sizeof(s)); cin>>a; flag = 0; int len = strlen(a); int top = 0; for(int i = 0; i < len ; i++) { if(a[i] == '(' || a[i] == '[' || a[i] == '{') { s[++top] = a[i]; } if(a[i] == ')' || a[i] == ']' || a[i] == '}') { if(top == 0) { printf("No\n"); flag = 1; break; } if((a[i] == ')' && s[top] == '(') ||( s[top] == '[' && a[i] == ']' )|| (s[top] == '{' && a[i] == '}') ) { top--; continue; } else { printf("No\n"); flag = 1; break; } } } if(flag == 0) printf("Yes\n"); } return 0; }
代码二:调用c++ 库函数: stack< Type > s;
/************************************************************************* > File Name: 括号匹配.cpp > Author: dulun > Mail: dulun@xiyoulinux.org > Created Time: 2016年04月08日 星期五 01时21分05秒 ************************************************************************/ #include<iostream> #include<stdio.h> #include<cstring> #include<cstdlib> #include<algorithm> #include<stack> #define LL long long using namespace std; const int N = 50086; char a ; int main() { int n; cin>>n; while(n--) { memset(a, 0, sizeof(a)); cin>>a; stack<char> s; int len = strlen(a); bool flag = 0; for(int i = 0; i < len; i++) { if(a[i] == '(' || a[i] == '[' || a[i] == '{' ) { s.push(a[i]); } else if(!s.empty()) { char t = s.top(); s.pop(); if((a[i] == ')' && t == '(')||( a[i] == ']' && t == '[') ||(t== '{' && a[i] == '}' )) continue; else { flag = 1; break; } } else { flag = 1; break; } } if(flag == 0 && s.empty()) printf("Yes\n"); else printf("No\n"); } return 0; }
相关文章推荐
- HDU 1166 敌兵布阵[线段树单点更新成段查询]
- 序列化二叉树
- 《JAVA并发编程实践》学习笔记(第三章)
- 95. Unique Binary Search Trees II
- 重点文章链接及资源链接汇总
- 设计模式之单例模式
- IOS开发--支付宝支付
- 先装.net后装iis的问题
- 通过call_usermodehelper()在内核态执行用户程序【转】
- HDU 1754 I Hate It(线段树区间求最值)
- IDA*
- Java Static关键字
- Coursera Machine Learning Note - Week 3
- Coursera Machine Learning Note - Week 2
- nanakon
- S2-029漏洞GET poc?? 悬赏 5 WB 20160320
- 手机淘宝列表页面 的js调用展示
- 创建Tab页面,建立可切换分页Activity
- #5值传递和址传递,static,instanceof,递归#
- TextView使用大全