括號配對問題
- 描述
- 現在,有一行括號序列,請你檢查這行括號是否配對。
- 輸入
- 第一行輸入一個數N(0<N<=100),表示有N組測試數據。後面的N行輸入多組輸入數據,每組輸入數據都是一個字符串S(S的長度小於10000,且S不是空串),測試數據組數少於5組。數據保證S中只含有"[","]","(",")"四種字符
- 輸出
- 每組輸入數據的輸出佔一行,如果該字符串中所含的括號是配對的,則輸出Yes,如果不配對則輸出No
- 樣例輸入
-
3 [(]) (]) ([[]()])
- 樣例輸出
-
No No
Yes
-
個人理解:這題考慮到棧的問題,首先應該判斷這個即將被輸入的數據到底是什麼字符來決定後面的操作,遇到(或者[壓入棧內,遇到)或]則應想判斷其是不是爲空。不爲空返回棧頂元素,如果匹配就刪除,重複上述操作。當棧變空,輸出YES,反之輸出NO。
-
結果 時間 內存 語言 Accepted 4 240 C #include<stdio.h> #include<string.h> #define MAX 10000 int main() { char s[MAX],k[MAX]; int t,top,i; scanf("%d",&t); while(t--) { top=-1; scanf("%s",k); int len=strlen(k); for(i=0;i<len;i++) { if(k[i]=='['||k[i]=='(') { s[++top]=k[i]; } else{ if((k[i]-s[top])==1||(k[i]-s[top])==2) top--; else{ s[++top]=k[i]; } } } if(top==-1) printf("Yes\n"); else printf("No\n"); } return 0; }