描述
現在,有一行括號序列,請你檢查這行括號是否配對。
輸入
第一行輸入一個數N(0<N<=100),表示有N組測試數據。后面的N行輸入多組輸入數據,每組輸入數據都是一個字符串S(S的長度小于10000,且S不是空串),測試數據組數少于5組。數據保證S中只含有"[", “]”, “(”, “)” 四種字符
輸出
每組輸入數據的輸出占一行,如果該字符串中所含的括號是配對的,則輸出Yes,如果不配對則輸出No
樣例輸入
3
[(])
(])
([])
樣例輸出
No
No
Yes
思路分析:
①,
定義一個char類型的數字s【65535】負責存儲數據;還有一個char類型的字符ch,負責一個一個接收數據;int類型的n,負責控制次數; int類型的top負責查看s數組的下表。
②,
每輸入一個ch,進行判斷,若是‘(’或是‘【’,則top指向的s數組進行top++,將ch存入s里面;
若ch為‘)’并且s下標top>0(說明s里面已經有元素了),并且s【top-1】==‘(’,則top–;
同理,若ch為‘】’并且s下標top>0(說明s里面已經有元素了),并且s【top-1】==‘【’,則top–;
③,
最后判斷top的值是否為0,若是0,則s里面沒有剩余元素,即全部匹配;反之則沒有完全匹配。
####代碼如下:
#include<stdio.h>
#include<string.h>int main()
{char s[65535];int n;scanf("%d",&n);getchar();while(n--){int top=0;char a;while((a=getchar())!='\n'){if(a==')' && top>0 && s[top-1]=='(')top--;else if(a==']' && top>0 && s[top-1]=='[')top--;else s[top++]=a;}if(top==0) printf("Yes\n");else printf("No\n");}return 0;
}