1. 程式人生 > >NYOJ 題目2 括號配對問題

NYOJ 題目2 括號配對問題

括號配對問題

時間限制:3000 ms  |  記憶體限制:65535 KB 難度:3
描述
現在,有一行括號序列,請你檢查這行括號是否配對。
輸入
第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行輸入多組輸入資料,每組輸入資料都是一個字串S(S的長度小於10000,且S不是空串),測試資料組數少於5組。資料保證S中只含有"[","]","(",")"四種字元
輸出
每組輸入資料的輸出佔一行,如果該字串中所含的括號是配對的,則輸出Yes,如果不配對則輸出No
樣例輸入
3
[(])
(])
([[]()])
樣例輸出
No
No
Yes
這道題,要加判斷字串是否為奇數,是奇數當然就錯了,因為如果不加這個條件給出的棧裡可能還有符號判斷完畢就永遠的留在了棧裡,導致本來結果是錯的,最後答案是對的。
#include <stdio.h>
#include <string.h>
char s[100],top[10005];
int main (void)
{
   // freopen("題目2.txt","r",stdin);
    int i,j,n,ok,len,k;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=1;i<=n;i++)
        {
            j=0;
            ok=1;
           scanf("%s",s);
           len=strlen(s);
           if(len%2) 
           {
               printf("No\n");
               continue;
           }
           top[0]=s[0];
           k=1;
            for(j=1;j<len;j++)
            {
               if(s[j]=='('||s[j]=='[') top[k++]=s[j];
               else if((s[j]==']'&&top[k-1]=='[')||(s[j]==')'&&top[k-1]=='('))
                k--;
               else ok=0;
            }
            if(ok) printf("Yes\n");
            else printf("No\n");
        }
    }
    return 0;
}