匹配
题目大意:
给你一个长度为n的字符串(有多组数据),中间有小写字母(没用的东西)和大写字母,A-M是左括号,与之相对的是右括号Z-N(之所以说是Z-N而不是N-Z是因为只有Z可以和A相对,只有M可以和N相对……),求他是否正确,就是判断是否有单个括号,括号不匹配,左括号过多,右括号过多的情况,正确输出1否则输出0
样例输入
12
AabcZBBefYeY
样例输出
1
数据范围限制
提示
数据说明:
50%的数据N<=1000
100%的数据N<=1000000
解题思路
利用栈的原理,当有大写字母时就判断,如果和栈顶匹配,dep(栈的高度)++,否则就入栈,最后看看栈是否为空就行了
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;
int dep,n,a[1000005];
char x;
int main()
{while(cin>>n){dep=0;for (int i=1;i<=n;i++){cin>>x;if((x>='A')&&(x<='Z')){if ((dep)&&(x==a[dep])) dep--;else a[++dep]=155-x;}}if (!dep) printf("1\n");else printf("0\n");}return 0;
}