1. 程式人生 > >資料結構——括號匹配

資料結構——括號匹配

括號配對問題 時間限制: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> using namespace std; int main(void) { int n; scanf("%d",&n); while(n--) { char str[10002]; stack<char>s; scanf("%s",str); int len=strlen(str); int i; for(i=0;i<len;i++) { if(s.empty()) s.push(str[i]); else { if(str[i]==s.top()+1 || str[i]==s.top()+2) s.pop(); else s.push(str[i]); } } if(s.empty()) printf("Yes\n"); else printf("No\n"); } }


檢視原文:http://www.wyblog.cn/2016/10/20/%e6%95%b0%e6%8d%ae%e7%bb%93%e6%9e%84-%e6%8b%ac%e5%8f%b7%e5%8c%b9%e9%85%8d/