一道简单到无名却又WA了半天的题--括号匹配
2015-07-11 19:43
288 查看
难度:3
描述 现在,有一行括号序列,请你检查这行括号是否配对。
输入第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No样例输入
样例输出NoNoYes
括号配对问题
时间限制:3000 ms | 内存限制:65535 KB难度:3
描述 现在,有一行括号序列,请你检查这行括号是否配对。
输入第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No样例输入
3 [(]) (]) ([[]()])
样例输出NoNoYes
#include<string.h> #include<stdio.h> const int sz = 10010; typedef struct{ char data[sz]; int top; }Stack; void stack_init(Stack* s) { s -> top = -1; } void stack_push(Stack* s, char ch) { s -> data[++(s -> top) ] = ch; } void stack_pop(Stack* s) { s -> top --; } char stack_top(Stack* s) { return s -> data[s ->top]; } int IsEmpty(Stack* s) { if(s -> top == -1) return 1; else return 0; } int main() { int n; int i; Stack s; stack_init(&s); scanf("%d", &n); while(n--) { char input[sz]; int value = 1; scanf("%s",input); for(i = 0; i < strlen(input); i ++) { if(input[i] == ']') if(stack_top(&s) == '[') stack_pop(&s); else { printf("No\n"); return 0; } else if(input[i] == ')') if(stack_top(&s) == '(') stack_pop(&s); else { printf("No\n"); return 0; } else stack_push(&s, input[i]); } if(IsEmpty(&s)&&value == 1) printf("Yes\n"); else printf("No\n"); } }写的感觉很复杂,不知道错在哪了,估计重码一遍会比较好
相关文章推荐
- HDU 1711 Number Sequence(算法验证)
- php将表单信息传入数据库
- 好东西得收藏
- Kernel那些事儿之内存管理(7) --- Slab(上)
- IE6、 IE7、IE8、IE9、Firefox兼容性问题
- Tcl学习之--表达式
- 光电耦合器
- 2.UITableView表视图左滑 删除
- 黑马程序员--java基础学习笔记6
- Python3.x安装第三方库的方法 欢迎使用CSDN-markdown编辑器
- Jquery Ajax同步在mobile safari浏览器中运行异常
- 设计模式(java)2——简单工厂模式
- [LeetCode] 3Sum Closest
- c# 线程安全
- STM32学习笔记之开发环境
- 【系列文章】数据结构与算法——图
- 介绍本书
- nyoj284 坦克大战(dijkstra(bfs+优先队列))
- STM32学习笔记之时钟分析
- STM32学习笔记之内存结构