括号匹配问题
来源:互联网 发布:大学生网络兼职论坛 编辑:程序博客网 时间:2024/05/08 18:35
括号配对问题
时间限制:3000 ms | 内存限制:65535 KB
难度:3
- 描述
- 现在,有一行括号序列,请你检查这行括号是否配对。
- 输入
- 第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
- 输出
- 每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
- 样例输入
3[(])(])([[]()])
- 样例输出
NoNoYes
//(1)数组#include<stdio.h>#include<string.h>int main(){ int n,i,k; char ch[10005]; char sh[10005]; scanf("%d",&n); while(n--) { scanf("%s",ch); k=1; for(i=0;i<strlen(ch);i++) { if(ch[i]=='[' || ch[i]=='(')//切记为‘||’ sh[k++]=ch[i]; //此处k++导致下面匹配减1 else if(ch[i]==']') { if(k>1 && sh[k-1]=='[')//切记此时sh的下标为k-1,若配对成功,则k-- k--; else{ k++; //若k=1 且 ch[i]=']',为第一个元素肯定不匹配 break; } } else if(ch[i]==')') //同上 { if(k>1 && sh[k-1]=='(') k--; else{ k++; //切记此时不匹配时,要k++,使得此时k!=1 break; } } } if(k==1) printf("Yes\n"); else printf("No\n"); } return 0;}//***********************************************///(2)栈的思想,自己建栈#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>typedef struct mylist{ struct mylist *next; char ch;}mylist;static mylist *stack;void push(char sh)//入栈{ mylist *new_list; new_list=(mylist *)malloc(sizeof(mylist)); assert(new_list!=NULL); new_list->ch=sh; new_list->next=stack; stack=new_list;}void pop() //出栈{ mylist *pre; assert(stack!=NULL); pre=stack; stack=pre->next; free(pre);}int top() //栈顶元素{ assert(stack!=NULL); return stack->ch;}void matching(char sh[]){ int i; for(i=0;i<strlen(sh);i++) { if(sh[i]=='[' || sh[i]=='(') push(sh[i]); else if(sh[i]==']') { if(stack!=NULL && stack->ch=='[') pop(); else{ push(sh[i]);//切记此时不匹配时,要push,使得此时stack!=NULL break; } } else if(sh[i]==')') { if(stack!=NULL && stack->ch=='(') pop(); else{ push(sh[i]);//切记此时不匹配时,要push,使得此时stack!=NULL break; } } } if(stack==NULL) printf("Yes\n"); else printf("No\n");}int main(){ int n; char sh[10001]; scanf("%d",&n); while(n--) { scanf("%s",sh); stack=NULL; matching(sh); } return 0;}//******************************************///(3)栈的思想 C++ 调用库函数#include <iostream>#include <stack>#include <string.h>using namespace std;int main(){ int i,n; char ch[10001]; cin>>n; while(n--) { cin>>ch; stack<char>sh; for(i=0;i<(int)strlen(ch);i++) { if(ch[i]=='[' || ch[i]=='(') sh.push(ch[i]); else if(ch[i]==']') { if(!sh.empty() && sh.top()=='[')//一定是否判断非空 sh.pop(); else{ sh.push(ch[i]); //不匹配,入栈,使栈不为空 break; } } else if(ch[i]==')') { if(!sh.empty() && sh.top()=='(') sh.pop(); else{ sh.push(ch[i]); break; } } } if(sh.empty()) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0;}
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号的匹配问题
- 括号匹配问题
- 括号匹配问题
- [栈] 括号匹配问题
- NY : 括号匹配问题
- 括号匹配问题
- Java 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- boundingRectWithSize:options:attributes:context:
- WM_SIZING和WM_SIZE区别及EasySize类的使用
- S5pv210 出现一个离奇wince6.0 activesync 软件连接问题
- 冒泡排序的Java实现
- 焊接 0.5mm 间距 40pin 软排线底座FPC 的经验小谈
- 括号匹配问题
- 常见通信类型
- 从ramdist根文件系统启动linux
- Django源代码阅读分析-2:持久层结构分析
- 上传附件commonsnet1.4.1.jar与webligic中的Jar冲突问题
- 使用Jquery+EasyUI 进行框架项目开发案例讲解之二---用户管理源码分享
- show命令
- 一个门外汉对java的开始
- STM8S 中断唤醒,定时唤醒,窗口看门狗