括號配對問題
時間限制:3000 ms | 記憶體限制:65535 KB
難度:3
- 描述
- 現在,有一行括號序列,請你檢查這行括號是否配對。
- 輸入
- 第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行輸入多組輸入資料,每組輸入資料都是一個字串S(S的長度小於10000,且S不是空串),測試資料組數少於5組。資料保證S中只含有"[","]","(",")"四種字元
- 輸出
- 每組輸入資料的輸出佔一行,如果該字串中所含的括號是配對的,則輸出Yes,如果不配對則輸出No
- 樣例輸入
-
3 [(]) (]) ([[]()])
- 樣例輸出
-
No No Yes
#include <iostream> #include <vector> #include <algorithm> #include <string> #include <stack> using namespace std; int main(){ int n; cin >> n; while(n--){ string str; cin >>str; stack<char> branch; for(int i = 0 ; i < str.length();++ i){ if(branch.empty()) branch.push(str[i]); else if(str[i] == ']'|| str[i] == ')'){ if(str[i] == ']' && '[' == branch.top() ) branch.pop(); else if(str[i] == ')' && '(' == branch.top()) branch.pop(); else break; }else{ branch.push(str[i]); } } if(branch.empty()) cout<<"Yes"<<endl; else cout<<"No"<<endl; } }