首先我們先了解一下這一道水題:
【問題描述】
給你乙個只有小括號和中括號和大括號的括號序列,問該序列是否合法。
【輸入格式】
一行乙個括號序列。
【輸出格式】
如果合法,輸出ok,否則輸出wrong。
【樣例輸入】
[(])
【樣例輸出】
wrong
【資料範圍與規定】
對於的資料,序列長度不超過1000。
解析:
關於這種括號匹配的題,首先要想到的是通過 stack 來進行做,而關於 stack 本部落格之前講過,這道題便可以說是 stack 的乙個模板題...這裡介紹兩種做法...
方法一: 用陣列進行模擬棧,自己做乙個手動棧,時間上可能會比 stl庫中提供的棧會快一些...
1 #include2 #include3stack by hand4 using namespace std;
5 6 char s[1005], z[1005];
7 8 int size;
9 10 int main()
21 else size--;
22 }
23 if (s[i] == ']')
28 else size--;
29 }
30 if (s[i] == '}')
35 else size--;
36 }
37 if (s[i] == '
41 }
42 if(size != 0) printf("wrong\n");
43 else printf("ok\n");
44
45 return 0;
46 }
方法二: 直接用stl中的棧:
1 #include2 #include3 #include4stack by stl5 using namespace std;
6 7 char s[1005];
8 int l;
9 10 stack k;
11 12 int main()
22 else k.pop();
23 }
24 if (s[i] == ']')
29 else k.pop();
30 }
31 if (s[i] == '}')
36 else k.pop();
37 }
38 if (s[i] == '(' || s[i] == '
41 }
42 if (!k.empty()) printf("wrong\n");
43 else printf("ok\n");
44 return 0;
45 }
關於括號問題——一般都是關於棧的模板
最長合法括號序列 棧(括號題)
這是另一道處理合法括號序列的題目。我們應該提醒你,如果乙個括號序列插入 和 1 後,可以得到乙個正 確的數學表示式,那麼它被稱為 合法 的。例如,序列 和 是合法的,但 和 不是。給出乙個由 和 字元組成的字串。你要找出它最長的是合法括號序列的子串,也同樣要找出最長子串的個數。括號題容易想到棧,把左...
NOIP模擬題 括號序列
題目描述 課堂上,felix 剛剛學習了關於括號序列的知識。括號序列是乙個只由左括號 和右括號 構成的序列 進一步的,乙個合法的括號序列是指左括號和右括號能 夠 一一匹配的序列。如果用規範的語言說明,乙個合法的括號序列可以有以下三種形式 1 s 空串 s 是乙個合法的括號序列 2 s xy,其中 x...
演算法題 補全括號序列
大概意思就是 給出乙個中括號序列,在序列前後可以加中括號字元,補全它。當時沒想起來解決辦法,然後涼涼了,後來專門去搞了這道題,終於搞定 思路在注釋裡寫的比較詳細了,此處不再贅述 用了類似棧的思想 字串轉陣列 param str string 輸入的字串 return array 轉換之後的結果陣列 ...