括号配对问题--nyoj-2(栈)

今天药忘吃喽~ 2022-08-04 08:53 261阅读 0赞

#

括号配对问题

时间限制: 3000 ms | 内存限制:65535 KB

难度: 3

描述现在,有一行括号序列,请你检查这行括号是否配对。

输入

第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有”[“,”]“,”(“,”)”四种字符

输出

每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No

样例输入

  1. 3
  2. [(])
  3. (])
  4. ([[]()])

样例输出

  1. No
  2. No
  3. Yes

第一次我是用的数组然后遍历搜索,要考虑很多种情况,今天二师兄给我们讲了栈,感觉萌萌哒!

  1. 1 #include<stdio.h>
  2. 2 #include<string.h>
  3. 3 char stack[10001],a[100001];//以后数组尽量定义到函数外
  4. 4 int main()
  5. 5 {
  6. 6 int n,i,j;
  7. 7 scanf("%d",&n);
  8. 8 getchar();吸收回车符
  9. 9 while(n--)
  10. 10 {
  11. 11 gets(a);
  12. 12 int top=1;
  13. 13 stack[0]=a[0];
  14. 14 for(i=1;i<strlen(a);i++)
  15. 15 {
  16. 16 stack[top]=a[i];
  17. 17 if(stack[top-1]=='['&&stack[top]==']')
  18. 18 top--;
  19. 19 else if(stack[top-1]=='('&&stack[top]==')')
  20. 20 top--;
  21. 21 else
  22. 22 top++;
  23. 23 }
  24. 24 if(top==0)
  25. 25 printf("Yes\n");
  26. 26 else
  27. 27 printf("No\n");
  28. 28 }
  29. 29 return 0;
  30. 30 }

发表评论

表情:
评论列表 (有 0 条评论,261人围观)

还没有评论,来说两句吧...

相关阅读

    相关 括号配对问题

    描述 现在,有一行括号序列,请你检查这行括号是否配对。 输入 第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个

    相关 括号配对问题

    描述 现在,有一行括号序列,请你检查这行括号是否配对。 输入 第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都

    相关 括号配对问题

    括号配对问题,其实是栈的一个应用,很常见也很普通。 栈是最常见的和最重要的数据结构之一,用途非常广泛。它是一种只能在一端进行插入或删除操作的线性表,括号配对是栈的链式储存及