题意
有多组数据,每组数据有以下东东:
1.一个
n
n
n
2.一串有n个字母的字符串
然后
A
.
.
.
.
.
M
A.....M
A.....M分别与
Z
.
.
.
.
.
N
Z.....N
Z.....N配对(如
A
,
Z
A,Z
A,Z),然后一个配对中的左边若在另一个配对中,另一边也一定要在这个配对中才算配对
现给多组数据,要判断数据中的字符串是否配对
配对输出1,否则输出0
样例
样例输入
12
AabcZBBefYeY
样例输出
1
思路
用栈来求它是否配对,若配对,则弹出栈顶,否则就是不配对的。
代码
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int ch[1000001],n; bool f;
string s;
int main()
{
scanf("%d\n",&n);
while (n)//判断读完没有
{
memset(ch,0,sizeof(ch));
int t=0;
f=0;
cin>>s;//读入当前字符串
for(int i=0;i<n;++i)
{
if (s[i]>='A'&&s[i]<='M')ch[++t]=s[i]-'A'+1;//记录左边
else
if (s[i]>='N'&&s[i]<='Z')//找到的右边
{
if(ch[t]=='Z'-s[i]+1)ch[t]=0,--t;//判断配不配对
else
{
f=1;
break;
}
}
}
if(ch[t])f=1;
if(f) printf("0\n");
if(!f) printf("1\n");
n=0;
scanf("%d\n",&n);
}
return 0;
}