【NYOJ】括號配對問題
阿新 • • 發佈:2019-02-08
括號配對問題
時間限制: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> #include<stack> #include<algorithm> using namespace std; int main(){ int n; scanf("%d",& n); while (n--){ stack<char> s; char str[10000+5]; scanf("%s",str); int l =strlen(str); bool flag=true; for (int i=0;i<l;i++){ if (str[i]=='('||str[i]=='['){ s.push(str[i]); } else{ if(!s.empty()) { if(str[i]==')'){ if(s.top()=='(') s.pop(); else { flag=false; break; } } else { if(s.top()=='[') s.pop(); else { flag=false; break; } } } else { flag=false; break; } } } if(!flag) printf("No\n"); else if(!s.empty()) printf("No\n"); else printf("Yes\n"); } return 0; }