NYOJ题目2括号配对问题

来源:互联网 发布:淘宝客辅助器 编辑:程序博客网 时间:2024/06/07 06:16

括号配对问题

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

naonao

分析:这道题考察的是对栈的使用,另外注意&&连接的两个等式有时候不能交换位置

#include<iostream>#include<stdio.h>#include<string.h>#include<stack>using namespace std;char s[12000];int main(){    int n;    stack<char> q;    cin>>n;    while(n--)    {        cin>>s;        int len=strlen(s);        if(s[0]==']'||s[0]==')')        {            printf("No\n");            continue;        }        while(!q.empty())          q.pop();          int flag=1;        for(int i=0;i<len;i++)        {            if(s[i]=='('||s[i]=='[')                q.push(s[i]);            if(s[i]==')')            {                if(!q.empty() && q.top()=='(')                    q.pop();                else                {                    flag=0;                    printf("No\n");                    break;                }            }            if(s[i]==']')            {               if(!q.empty()&&q.top()=='[')     //这里的&&前后的等式不能交换,如果写成q.top()=='['&&!q.empty()就错了                    q.pop();                 else                 {                     flag=0;                     printf("No\n");                     break;                 }            }        }        if(!q.empty()&&flag==1)            printf("No\n");        if(q.empty()&&flag==1)            printf("Yes\n");    }    return 0;}




0 0
原创粉丝点击