匹配
首先一个
n
n
n,然后就是一个长度为
n
n
n的字符串
s
s
s,
s
s
s里只会出现
a
…
…
z
a……z
a……z和
A
…
…
Z
A……Z
A……Z,
A
A
A匹配
Z
…
…
M
Z……M
Z……M匹配
N
N
N
不能交叉在一起,例如:ABZY就不行
求
s
s
s中所有的字母(大写)是否都有配对的。
有多组数据!!
样例输入
12
AabcZBBefYeY
样例输出
1
思路
用栈,如果是左括号,进栈;如果是右括号,看一下是否匹配,如果是,则弹出顶端的左括号,否则 b r e a k break break
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n,m,t,a[2000010];
string s;
bool f=0;
int main()
{
freopen("match.in","r",stdin);
freopen("match.out","w",stdout);
scanf("%d",&n);
while(n)//判断是否还在读
{
memset(a,0,sizeof(a));
t=0;f=0;
cin>>s;
for(int i=0;i<=n-1;++i)
{
if('A'<=s[i] && s[i]<='M')a[++t]=(26-(s[i]-'A'));//记录起来
else
if('N'<=s[i] && s[i]<='Z')
{
if(a[t]==s[i]-'A'+1)//如果能够匹配
{
a[t]=0;//出栈
t--;
}
else//如果不能匹配
{
f=1;
break;
}
}
}
if(!f && !t)printf("1\n");
else printf("0\n");//如果还有左括号的话
n=0;//记得要清零,否则会死循环
scanf("%d\n",&n);
}
fclose(stdin);
fclose(stdout);
return 0;
}