括号匹配问题
来源:互联网 发布:网络电视机顶盒哪个好 编辑:程序博客网 时间:2024/06/08 09:27
描述
现在,有一行括号序列,请你检查这行括号是否配对。
- 输入
- 第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
- 输出
- 每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
- 样例输入
3[(])(])([[]()])
- 样例输出
NoNoYes
用栈实现的,VS2013 和gcc version 4.8.2 (GCC)编译通过 NO error NO warning
不过还是不能AC RuntimeError o(╯□╰)o 。。。
写的很烂,只不过就一思路而已。
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 10000+10char Str[N];typedef char Type;typedef struct StackRecord{int TopOfStack;Type *A;}ArrayStack, *Stack;Stack InitSatck(Stack S, int size){S->TopOfStack = -1;S->A = (Type *) malloc(sizeof(Type)* size);return S;}void PushStack(Stack S, Type ch){S->A[++S->TopOfStack] = ch;}Type PopStack(Stack S){return S->A[S->TopOfStack--];}void DistoryStack(Stack S){free(S->A);free(S);}int main(){int i, n;scanf("%d\n", &n);while (n--){gets(Str);if (Str[0] == ']' || Str[0] == ')')printf("No\n");else{int flag = 1;Stack S;S = (Stack)malloc(sizeof(ArrayStack));S = InitSatck(S, strlen(Str));for (i = 0; i < strlen(Str); i++){if (Str[i] == '[' || Str[i] == '(')PushStack(S, Str[i]);if (Str[i] == ']' || Str[i] == ')'){switch (Str[i]){case ']':if (PopStack(S) != '[')flag = 0;break;case ')':if (PopStack(S) != '(')flag = 0;break;}}}if (flag && S->TopOfStack == -1)printf("Yes\n");elseprintf("No\n");DistoryStack(S);}}return 0;}
2015/9/17 update
#include<algorithm>#include<iostream>#include<cstdlib>#include<cstring>#include<cstdio>#include<vector>#include<stack>#include<set>using std::set;using std::sort;using std::pair;using std::swap;using std::stack;using std::multiset;#define pb(e) push_back(e)#define sz(c) (int)(c).size()#define mp(a, b) make_pair(a, b)#define all(c) (c).begin(), (c).end()#define iter(c) decltype((c).begin())#define cls(arr, val) memset(arr, val, sizeof(arr))#define cpresent(c, e) (find(all(c), (e)) != (c).end())#define rep(i, n) for(int i = 0; i < (int)n; i++)#define tr(c, i) for(iter(c) i = (c).begin(); i != (c).end(); ++i)const int N = 10010;const int INF = 0x3f3f3f3f;typedef unsigned long long ull;char buf[N];bool solve() {char x;stack<char> op;int n = strlen(buf);rep(i, n) {char &ch = buf[i];if ('(' == ch || '[' == ch) op.push(ch);else if (')' == ch) {if (!op.size()) return false;x = op.top();if ('(' == x) op.pop();else op.push(x);} else if (']' == ch) {if (!op.size()) return false;x = op.top();if ('[' == x) op.pop();else op.push(x);}}return op.empty();}int main() {#ifdef LOCALfreopen("in.txt", "r", stdin);freopen("out.txt", "w+", stdout);#endifint t;scanf("%d", &t);getchar();while (t--) {gets(buf);puts(solve() ? "Yes" : "No");}return 0;}
0 0
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号的匹配问题
- 括号匹配问题
- 括号匹配问题
- [栈] 括号匹配问题
- NY : 括号匹配问题
- 括号匹配问题
- Java 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 关于ListView中使用自定义Adapter及时更新数据
- 字符编码那些事儿(UTF-8,GBK,Unicode,ASCII)(三)
- XYZZY - UVa 10557 图论
- 微信企业号接入JDK6和JDK7及JDK8加解密失败处理(Java)
- Win7下U盘安装Ubuntu14.04双系统步骤详解
- 括号匹配问题
- Android调用优酷SDK实现上传视频到优酷
- 将解压版的Tomcat作为系统服务启动
- windows下php的版本如何选择?
- 【模拟】 HDOJ 5071 Chat
- 马云:初次创业时我连计算机是什么都不知道
- 通过XML签名和加密更安全地交换数据
- 【安卓病毒分析报告】FakeBank-盗取韩国银行信息的手机病毒
- 从ldd谈起 [linux演习]