NYOJ002 括号配对问题(栈)
来源:互联网 发布:淘宝上专卖店有假货吗 编辑:程序博客网 时间:2024/05/17 03:45
题目:
括号配对问题
时间限制:3000 ms | 内存限制:65535 KB
难度:3
- 描述
- 现在,有一行括号序列,请你检查这行括号是否配对。
- 输入
- 第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
- 输出
- 每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
- 样例输入
3[(])(])([[]()])
- 样例输出
NoNoYes
#include<stdio.h>#include<string.h>int peidui(char a,char b)//检测是否括号配对{ if (a==')'&&b=='(') return 1; if (a==']'&&b=='[') return 1; return 0;}int main(){ int t; scanf("%d",&t); getchar(); while (t--) { char s[10001]= {0},ch[10001]= {0}; int top=0,len,num=0; gets(s);//写入字符串到数组 len=strlen(s); if (len%2==1) { printf("No\n");//奇数不可能配对 } else { for (int i=0; i<len; i++) { if (s[i]=='('||s[i]=='[') ch[top++]=s[i];//当当前的值是左括号时,压栈进入top //printf("ch[%d]=%c,s[%d]=%c\n",top-1,ch[top-1],i,s[i]); if (s[i]==')'||s[i]==']')//检测当前的值是否和栈中的括号配对 { if (peidui(s[i],ch[top-1])) { // printf("第二s[%d]=%c,ch[%d]=%c\n",i,s[i],top-1,ch[top-1]); top--;//如果两个括号符配对,出栈 num++;//表示已经配对一组括号 } } } if (num==len/2)//检测配对的括号是否是总长度的一半 printf("Yes\n"); else printf("No\n"); } } return 0;}
代码2(利用栈):
#include <stdio.h>#include <string.h>#include <math.h>#include <stack>#include <algorithm>#define mem(a,b) memset(a,b,sizeof(a))using namespace std;char ss[100005];stack<char>s;int peidui(char a,char b){ if(a=='['&&b==']') return 1; if(a=='('&&b==')') return 1; return 0;}int main(){ int t; scanf("%d",&t); while(t--) { while(!s.empty()) s.pop(); int num=0; mem(ss,'\0'); scanf("%s",ss); int len=strlen(ss); if(len%2==1) { printf("No\n"); } else { for(int i=0; i<len; i++) { if(ss[i]=='['||ss[i]=='(') s.push(ss[i]); if(ss[i]==']'||ss[i]==')') { if(!s.empty())//这里一定要判断栈是否为空 if(peidui(s.top(),ss[i])) { num++; s.pop(); } } } if (num==len/2) printf("Yes\n"); else printf("No\n"); } } return 0;}
ps:初学栈,存代码
0 0
- NYOJ002 括号配对问题(栈)
- NYOJ002 括号配对问题
- 括号配对问题(栈)
- 括号配对问题(栈)
- 括号配对问题---栈
- 括号配对问题 栈
- NYOJ 2 括号配对问题(栈)
- nyoj2括号配对问题(数据结构---栈)
- nyoj 括号配对问题(栈)
- 括号配对问题--nyoj-2(栈)
- NYOJ 2 括号配对问题(栈)
- NYoj 2 括号配对问题(栈)
- 栈 NYOJ 2 (括号配对问题)
- NYOJ 括号配对问题(栈)
- 括号配对问题(不用栈)
- NYOJ 括号配对问题(不用栈)
- 栈(括号配对)
- 括号配对问题 栈实现
- 单例Singleton的“懒汉式”与“饿汉式”实现方法
- 阻止事件(取消其默认行为并阻止其传播)
- Ubuntu16.04下为chrome/firefox安装flash player插件(即chrome浏览器安装)
- iOS label自适应高度
- jquery.nestable 树型结构
- NYOJ002 括号配对问题(栈)
- Flexgrid 取记录的方式
- CSS3 基础(002_边框图)
- java线程中BLOCKED和WAITING有什么区别?
- iOS开发拓展篇—音效的播放
- 文章标题
- 弱智的题
- 编写各种OutOfMemory & StackOverflow程序
- 双向广搜 八数码