題目2 括號配對問題

剛開始沒想到strlen(s)爲奇數時,就可以直接輸出No。

([(][)])這組數據,測試有問題,是因爲s[j]和s[j-1]沒仔細考慮,判斷的時候弄反了。

[()][] 這也是一組特殊數據,判斷先後順序很重要,如果先判斷i和j,結果就會出錯。

最後AC代碼:

 
#include<cstdio>
#include<cstring>

int main()
{
    int t;
    scanf("%d", &t);
    while(t--)
    {
        char s[10005];
        scanf("%s", s);
        int n=strlen(s), cont=0;
        if(n%2==1)
            printf("No\n");
        else{
            for(int i=0, j=n-1; i<j; )
            {
                if((s[i]=='['&&s[i+1]==']') || (s[i]=='('&&s[i+1]==')'))
                    i += 2;
                else if((s[j]==']'&&s[j-1]=='[') || (s[j]==')'&&s[j-1]=='('))
                    j -= 2;
                else if(s[i]=='(' && s[j]==')')
                {
                    i++;
                    j--;
                }
                else if(s[i]=='[' && s[j]==']')
                {
                    i++;
                    j--;
                }
                else
                {
                    printf("No\n");
                    cont++;
                    break;
                }
            }
            if(!cont)
                printf("Yes\n");
        }
    }
    return 0;
}
        


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章