NYOJ2—括号配对问题

 

括号配对问题

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
 
描述
现在,有一行括号序列,请你检查这行括号是否配对。
 
输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[", "]", "(", ")" 四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入
3
[(])
(])
([[]()])
样例输出
No
No
Yes
算法:
采用栈这种数据结构,遍历字符串遇到'('和'['的时候放入栈中,遇到')'和']'的时候取出栈顶元素进行对应的匹配,匹配上了就出栈,直到遍历完成,如果栈中还有剩余的元素没有出栈,那么输出NO否则输出Yes
下面我们来看一下具体的代码
复制代码
 1 #include <iostream>
 2 #include<string.h>
 3 #include<stack>
 4 using namespace std;
 5 int main()
 6 {
 7     int n;
 8     cin>>n;
 9     while(n--)
10     {
11         char a[10010];
12         cin>>a;
13         int i,l;
14         l=strlen(a);
15         if(l%2==1)//字符个数为奇数则肯定不匹配
16         {
17             cout<<"No"<<endl;
18             continue;
19         }
20         stack <char> s;
21         for(i=0;i<l;i++)
22         {
23             if(a[i]=='('||a[i]=='[')
24             {
25                 s.push(a[i]);
26             }
27             else
28             {
29                 if(!s.empty()&&s.top()=='('&&a[i]==')')
30                 {
31                     s.pop();
32                     continue;
33                 }
34                 if(!s.empty()&&s.top()=='['&&a[i]==']')
35                 {
36                     s.pop();
37                     continue;
38                 }
39             }
40         }
41         if(!s.empty())
42         {
43            cout<<"No"<<endl;
44             continue;
45         }
46         else
47         {
48            cout<<"Yes"<<endl;
49             continue;
50         }
51     }
52     return 0;
53 }
复制代码

若有不足和错误之处,欢迎兄弟们拍砖指正!!!

posted @   西*风  阅读(224)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示