括號配對問題
阿新 • • 發佈:2018-06-17
wid -- highlight width image 結果 line ext 圖片
原題鏈接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=2
括號配對問題
時間限制:3000 ms | 內存限制:65535 KB 難度:3- 描述
- 現在,有一行括號序列,請你檢查這行括號是否配對。
- 輸入
- 第一行輸入一個數N(0<N<=100),表示有N組測試數據。後面的N行輸入多組輸入數據,每組輸入數據都是一個字符串S(S的長度小於10000,且S不是空串),測試數據組數少於5組。數據保證S中只含有"[", "]", "(", ")" 四種字符
- 輸出
- 每組輸入數據的輸出占一行,如果該字符串中所含的括號是配對的,則輸出Yes,如果不配對則輸出No
- 樣例輸入
-
3 [(]) (]) ([[]()])
- 樣例輸出
-
No No Yes
1 #include<iostream> 2 #include<string.h> 3 using namespace std; 4 5 char stack[10001]; 6 char s[10001]; 7 int main() 8 { 9 int n; 10 cin>>n; 11 while(n--) 12 { 13 int top=1,len; 14 cin>>s; 15 len=strlen(s);
思想:在表達式中,相同類型的括號(包括:()、[]、{})是成對出現的,並且當括號在表達式中嵌套時,不允許出現交叉現象。
檢驗括號匹配的方法,就是對給定的字符串依次檢驗:若是左括號,入棧;若是右括號,出棧一個左括號判斷是否與之匹配;是其他字符,不檢驗。檢驗到字符串尾,還要檢查棧是否為空。只有棧空,整個字符串才是括號匹配的。AC結果:
運行結果:
括號配對問題