NYOJ 括號配對問題
阿新 • • 發佈:2018-11-15
時間限制: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 <cstdio> #include <vector> #include <string> using namespace std; int main(int argc, char const *argv[]) { //N組資料 int N; scanf("%d",&N); //用於儲存每一組的答案 vector<string> q; //迴圈N組 for(int i = 0;i < N;i++){ string str; cin >> str; string::iterator front = str.begin(); while(front != str.end()){ //標誌 int w = 0; //ASCALL碼 '(' => 40 ')' => 41 '[' => 91 ']' => 93 if(*front + 1 == *(front + 1) || *front + 2 == *(front + 1)){ // cout << *front << " " << *(front+1) << "\n" ; //刪除配對的一組 str.erase(front,front + 2); //標誌刪除後 w = 1; } //刪除後從頭開始 重新遍歷 if(w == 1)front = str.begin(); //否則繼續遍歷 else front++; } //當全都刪除後代表 都能配對成功 if(str.empty())q.push_back("Yes"); else q.push_back("No"); } for(vector<string>::iterator i = q.begin();i != q.end();i++) cout << *i << endl; return 0; }