NYOJ--2
原题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=2
分析:从后面往前面扫描,遇到配对的就删去,否则保存在栈里,继续扫描时,检查其是否与栈顶元素配对。
括号配对问题
1 2 #include<cstdio> 3 #include<cstring> 4 #include <stack> 5 #include <iostream> 6 using namespace std; 7 stack<char>d; 8 int main() 9 { 10 int N,len,i,flag; 11 char S[10005]; 12 scanf("%d",&N); 13 getchar(); 14 while(N--) 15 { 16 while(!d.empty())d.pop(); 17 scanf("%s",S); 18 len=strlen(S); 19 if(len%2==1)printf("No\n"); 20 else 21 { 22 for(i=len-1;i>=0;i--) 23 { 24 if(S[i-1]=='['&&S[i]==']'||S[i-1]=='('&&S[i]==')') 25 i--; 26 else 27 { 28 if(d.empty())d.push(S[i]); 29 else 30 { 31 if(S[i]=='['&&d.top()==']'||S[i]=='('&&d.top()==')') 32 d.pop(); 33 else d.push(S[i]); 34 } 35 } 36 } 37 if(d.empty())printf("Yes\n"); 38 else printf("No\n"); 39 } 40 } 41 return 0; 42 } 43