【栈】【字符】匹配(jzoj 1612)
生活随笔
收集整理的這篇文章主要介紹了
【栈】【字符】匹配(jzoj 1612)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
匹配
題目大意:
給你一個長度為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; }總結
以上是生活随笔為你收集整理的【栈】【字符】匹配(jzoj 1612)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件卡死无法结束进程怎么办电脑软件卡住了
- 下一篇: 【模拟】生日蛋糕(jzoj 1613)