NYACM_002
来源:互联网 发布:手机apk反编译软件 编辑:程序博客网 时间:2024/06/13 09:19
题目:括号配对问题
输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[", "]", "(", ")" 四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=2
分析:同样比较简单,使用栈来处理即可,如果待入栈和栈顶不匹配,直接入栈,如果匹配,栈顶出站,最后栈为空说明匹配,否则不匹配。同时有些不匹配情况不需要判断所有输入,比如如果待判断括号个数不是偶数肯定不匹配,如果待处理的是]或者),此时栈顶不是对应的[或者(,也肯定不匹配。简而言之,输入如果是)/],前面一个必须是(/[,输入如果是(/[直接入栈即可。最后看栈是否为空。
AC code:
#include <iostream>
#include <stack>
using namespace std;
int Check(string str)
{
int ret=0;
if(str.size()%2 != 0)
{
return 0; //奇数个肯定不匹配
}
stack<char> stk;
for(int i=0;i<str.size();i++)
{
if(stk.size() == 0 )
{
//如果当前栈空,可以直接入栈或者返回0(先入栈的是右括号)
if(str[i] == ')' || str[i] == ']' )
{
return 0;
}
else
{
stk.push(str[i]);
}
}
else
{
//如果是左括号,直接入栈
if(str[i] == '(' || str[i] == '[' )
{
stk.push(str[i]);
}
else
{
//看栈顶是否可以出栈
if((str[i] == ']' && stk.top() == '[') || (str[i] == ')' && stk.top() == '('))
{
stk.pop();
}
else
{
return 0;
}
}
}
}
if(stk.size() == 0)
{
ret=1;
}
else
{
ret=0;
}
return ret;
}
int main()
{
int N; //
string s;
cin>>N;
while(N--)
{
cin>>s;
if(Check(s) == 1)
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}
}
return 0;
}
其他:可以将判断栈是否为空推迟到需要出栈的时候,即如果是左括号直接入栈,如果是右括号,判断如果栈非空且栈顶匹配,出栈,否则直接返回不匹配,不过时间内存没有变化。
#include <iostream>
#include <stack>
using namespace std;
int Check(string str)
{
int ret=0;
if(str.size()%2 != 0)
{
return 0; //奇数个肯定不匹配
}
stack<char> stk;
for(int i=0;i<str.size();i++)
{
//如果是左括号,直接入栈
if(str[i] == '(' || str[i] == '[' )
{
stk.push(str[i]);
}
else
{
//看栈顶是否可以出栈
if(stk.size()>0 && ((str[i] == ']' && stk.top() == '[') || (str[i] == ')' && stk.top() == '(')))
{
stk.pop();
}
else
{
return 0;
}
}
}
if(stk.size() == 0)
{
ret=1;
}
else
{
ret=0;
}
return ret;
}
int main()
{
int N; //
string s;
cin>>N;
while(N--)
{
cin>>s;
if(Check(s) == 1)
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}
}
return 0;
}
- NYACM_002
- 基于Hadoop HA的Hbase集群搭建(权威)
- Learn Django 2
- linux常用命令
- Myeclipse2017实例关于servlet的@WebServlet注解。
- 阿里云CDN价格下调25% 再创国内最低价
- NYACM_002
- C++ 图论-Prim最小生成树
- Win7系统安装MySQL5.5.21图解教程
- C++中构造函数和析构函数调用的时机
- 模拟实现 strncpy( )函数
- 使用NetAssist注意事项
- 日期控件、校验
- Toy Storage POJ
- Android 调用相机拍照时报错FileUriExposedException .jpg beyond app through Intent.getData()