南阳理工ACM-题目2-括号配对问题

来源:互联网 发布:吉力贝怪味糖 知乎 编辑:程序博客网 时间:2024/06/05 20:19

括号配对问题

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述
现在,有一行括号序列,请你检查这行括号是否配对。
输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入
3[(])(])([[]()])
样例输出
NoNoYes
//超时代码:#include<stdlib.h>  #define MaxSize 100  typedef struct  {      char data[MaxSize];      int top;  }SeqStack;    SeqStack *Init_SeqStack()  {      SeqStack *s;      if(!(s=(SeqStack*)malloc(sizeof(SeqStack))))        printf("初始化失败\n");      else          s->top=-1;      return s;  }    int Push_SeqStack(SeqStack *s,char c)  {      s->top++;      s->data[s->top]=c;      return 1;  }    int Pop_seqStack(SeqStack *s)  {      s->top--;      return 1;  }  char PeekSt(SeqStack *s)  {      return (s->data[s->top]);  }        int main(void)  {      SeqStack *s;      s=Init_SeqStack();      int x;char ch;      scanf("%d",&x);      for(int i=0;i<=x;i++)      {          ch=getchar();          while((ch=getchar())!='\n')          {                 if(ch=='['||ch=='(')              Push_SeqStack(s,ch);              else                     switch(ch)                  {                      case ')':if(PeekSt(s)=='(')  Pop_seqStack(s);break;                      case ']':if(PeekSt(s)=='[')  Pop_seqStack(s);break;                  }                               }          if(s->top==-1)                  printf("Yes\n");          else                  printf("No\n");                            s->top=-1;      }        return 0;  }  
//AC#include<stdio.h>  int main()  {      int n;      scanf("%d",&n);      getchar();      while(n--)      {          int i=0;          char s[10000];          while(scanf("%c",&s[i])==1&&s[i]!='\n')          {                     if(s[i-1]=='['&&s[i]==']')              i-=2;              if(s[i-1]=='('&&s[i]==')')              i-=2;              ++i;          }              if(i==0)              printf("Yes\n");              else              printf("No\n");      }  }  

该题使用数组即可
0 0