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         

 

posted @ 2013-05-31 21:27  EtheGreat  阅读(167)  评论(0)    收藏  举报