题目连接:http://acm.nyist.net/JudgeOnline/problem.php?pid=2
这个题目有很多的解法,用数据结构中的栈,模板,容器,其实归根到底还是可以用很简单的数组来解决。
题目的关键是:如果这个输入合法,那么一组输入中一定有 “[]”或者“()”这样的,有这样的就简化,去掉,最后这个数组为空就是正解。
先开一个辅助数组,然后从原数组中提取,如果是“[”或者“(”存进辅助数组里面去,如果不是看前面的那个元素能不能把现在这元素消去,如果不可以表示这组数据不行。
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
int t;
char k[10001];
char c[10005]; //辅助数组
cin>>t;
while(t--)
{
cin>>k;
int len,clen(0); //clen 辅助数组的长度
len=strlen(k);
if(k[0]==']'||k[0]==')')
{
cout<<"No"<<endl;
continue;
}
c[clen]=k[0];
for(int i=1;i<len;i++)
{
if(k[i]=='['||k[i]=='(')
{clen++;
c[clen]=k[i];
}
if(k[i]==']')
{
if(c[clen]=='[')
clen--;
else
{
clen=10;
continue;
}
}
if(k[i]==')')
{
if(c[clen]=='(')
clen--;
else
{
clen=10;
continue;
}
}
}
//cout<<clen<<endl;
if(clen<0)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}