nyoj括号配对问题

来源:互联网 发布:android 仿淘宝分类 编辑:程序博客网 时间:2024/05/22 12:57

点击打开链接

                                              括号配对问题


时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述
现在,有一行括号序列,请你检查这行括号是否配对。
输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入
3[(])(])([[]()])
样例输出
NoNoYes

题解:此题是关于栈的问题,开始也是不怎么懂,总是以为只有stack那种才叫栈,后来才知道,不一定要用那个去实现,用平时的for就可以实现,只是这题参考了网上ac过的代码才通过,但觉得也是有点收获的。

下面是我的代码:

#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<cstdlib>using namespace std;char str[100009];char str1[100009];int main(){int len,n;scanf("%d%*c",&n);while(n--){int top=1;   // getchar();scanf("%s",str);len=strlen(str);str1[0]=str[0];if(len%2!=0){printf("No\n");}else if(str1[0]==')'||str1[0]==']')printf("No\n");else{for(int i=1;i<len;i++)//从1开始是因为第一个已经在上面判断过了 {str1[top]=str[i];if(str1[top-1]=='('&&str[i]==')')//这里是看是否配对 top--;//配对的话出栈 else if(str1[top-1]=='['&&str[i]==']')//与上同 top--;elsestr1[top++]=str[i];}if(top==0)printf("Yes\n");elseprintf("No\n");}}return 0;}


原创粉丝点击