括号配对问题

时间限制: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
下面我们来看一下具体的代码
 #include <iostream>
#include<string.h>
#include<stack>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--)
{
char a[];
cin>>a;
int i,l;
l=strlen(a);
if(l%==)//字符个数为奇数则肯定不匹配
{
cout<<"No"<<endl;
continue;
}
stack <char> s;
for(i=;i<l;i++)
{
if(a[i]=='('||a[i]=='[')
{
s.push(a[i]);
}
else
{
if(!s.empty()&&s.top()=='('&&a[i]==')')
{
s.pop();
continue;
}
if(!s.empty()&&s.top()=='['&&a[i]==']')
{
s.pop();
continue;
}
}
}
if(!s.empty())
{
cout<<"No"<<endl;
continue;
}
else
{
cout<<"Yes"<<endl;
continue;
}
}
return ;
}

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

最新文章

  1. HD1160FatMouse&#39;s Speed(最长单调递增子序列)
  2. 包含min函数的栈
  3. Chipscope 仿真VmodCAM IIC程序
  4. error: &#39;LOGE&#39; was not declared in this scope
  5. HW5.25
  6. 【JS】(+﹏+)~
  7. Spring 3.x企业实用开发实战(1)
  8. yii2之依赖注入与依赖注入容器
  9. PhiloGL学习(3)——程序员的法宝—键盘、鼠标
  10. 十一、Spring Boot 集成Shiro和CAS
  11. Global一点小经验
  12. 了解django部署(Django + Uwsgi + Nginx)
  13. Android studio 使用startService报错:IllegalStateException
  14. MT【245】小概率事件
  15. Azure VMSS (1) 入门
  16. jmeter作用域规则
  17. Elasticsearch Java API—多条件查询(must)
  18. Runtime 运行时之一:类与对象
  19. Log4j(2)--日志等级
  20. docker daemon文件/etc/docker/daemon.json配置

热门文章

  1. 基于express+mongodb+pug的博客系统——后台篇
  2. 菜鸟的HTML学习之路
  3. Xcode 7安装KSImageNamed 不启作用
  4. 实验二:klee处理未建模函数和处理error的方式
  5. 【Java】【转】在命令行中编译和运行java
  6. Ext根据条件显示隐藏列
  7. leetCode题解之寻找插入位置
  8. 数据库对比:选择MariaDB还是MySQL?
  9. MySQL慢日志简介及Anemometer工具介绍
  10. Azure Document DB Repository 的实现