剛開始沒想到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;
}