NYOJ 2 括号配对问题 (栈 stack)

来源:互联网 发布:dota2新英雄语音知乎 编辑:程序博客网 时间:2024/05/22 03:22

括号配对问题

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

思路:  用 栈的  先进后出  模拟  判断

已AC代码:

#include<cstdio>#include<cstring>#include<stack>using namespace std;char ch[11000],top;int main(){int N,i,j,len;scanf("%d",&N);while(N--){stack<char>Q;scanf("%s",ch);len=strlen(ch);  // 如果长度为奇数 一定不可能,第一个字符为 ']'或')' 也不可能 if(len%2==1||ch[0]==']'||ch[0]==')') {printf("No\n");continue;}Q.push(ch[0]);  // 第一个先入栈 for(i=1;i<len;++i){if(!Q.empty()) // 栈不为空时 {top=Q.top();   // 取队尾元素 if(top=='('&&ch[i]==')'||top=='['&&ch[i]==']') // 判断是否匹配 Q.pop();  // 如果配对就将 栈 中元素 弹出 elseQ.push(ch[i]); // 不配对就将新字符加入栈}else  //栈为空时 Q.push(ch[i]);}if(Q.empty())  // 如果完全匹配 栈为空 printf("Yes\n");else  printf("No\n");}return 0;}

0 0
原创粉丝点击