ACM 括號配對問題
- 描述
- 現在,有一行括號序列,請你檢查這行括號是否配對。
- 輸入
- 第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行輸入多組輸入資料,每組輸入資料都是一個字串S(S的長度小於10000,且S不是空串),測試資料組數少於5組。資料保證S中只含有"[","]","(",")"四種字元
- 輸出
- 每組輸入資料的輸出佔一行,如果該字串中所含的括號是配對的,則輸出Yes,如果不配對則輸出No
- 樣例輸入
3 [(]) (]) ([[]()])
- 樣例輸出
-
No No Yes
解題思路:
括號配對問題以及進位制間的轉換問題都是用棧實現的經典問題,主要解題思路是遍歷資料,若遇到左括號則進棧,遇到右括號且與棧頂元素相匹配,則棧頂元素出棧,以此步驟,直至遍歷完全部資料,判斷棧是否為空,若棧空,則括號能完全匹配{ ([[]()]) }
當然下面情況則可以直接判斷為不匹配:
1.當前棧為空且元素為右括號,則沒有左括號與其相匹配{ ] };
2.元素為右括號,但棧頂元素為與之不能匹配的左括號{ (] };
#include <iostream> #include <cstring> #include <stack> using namespace std; int main() { int N,k=0,j; char s[100][10000]; bool flag=0; stack<char> stk; cout<<"intput N"<<endl; cin>>N; for(int i=0;i<N;i++) { cin>>s[i]; } while(k<N) { while(!stk.empty()) //遍歷前置空棧 stk.pop(); for(j=0;j<strlen(s[k]);j++) { if((s[k][j]=='(') || (s[k][j]=='[')) stk.push(s[k][j]); else { if(stk.empty()) { cout<<"NO"<<endl; flag=1; break; } else if((s[k][j]==')' && stk.top()=='(')||(s[k][j]==']' && stk.top()=='[')) stk.pop(); else { cout<<"NO"<<endl; flag=1; break; } } } k++; if(1==flag) { flag=0; continue; //該組元素不匹配,繼續遍歷下一組 } if (stk.empty()) { cout<<"YES"<<endl; } else cout<<"NO"<<endl; } return 1; }
執行結果:
-
相關推薦
ACM 括號配對問題
括號配對問題描述現在,有一行括號序列,請你檢查這行括號是否配對。輸入第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行輸入多組輸入資料,每組輸入資料都是一個字串S(S的長度小於10000,且S不是空串),測試資料組數少於5組。資料保證S中只
ACM-括號配對問題
題目 括號配對問題 時間限制:3000 ms | 記憶體限制:65535 KB 難度:3 描述 現在,有一行括號序列,請你檢查這行括號是否配對。 輸入 第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行輸入多組輸入資料,每
括號配對問題--一道ACM線上測試題
今天在南陽理工學院的線上ACM測試上做了一道題,簡直弱爆了。。。請看原題: 描述 現在,有一行括號序列,請你檢查這行括號是否配對。 輸入第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行輸入多組輸入資料,每組輸入資料都是一個字串S(S的長度
括號配對問題2
main 輸入一個數 函數 字符 stdio.h stdlib.h return 長度 括號配對 #include<stdio.h> #include<string.h> #include<stdlib.h> // 寫一個判斷的括號是否匹
括號配對問題1
turn ces ID typedef lse tac pre types amp #include<stdio.h> #include<stdlib.h> #define Stack_size 10000 typedef struct
括號配對問題
wid -- highlight width image 結果 line ext 圖片 原題鏈接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=2 括號配對問題 時間限制:3000 ms | 內存限制:6553
1346: 括號配對
1346: 括號配對 時間限制: 1 Sec 記憶體限制: 256 MB 題目描述 給出一串長度為n的括號序列(只包含小括號),計算出最少的交換(兩兩交換)次數,使整個括號序列匹配。 我們認為一個括號匹配,即對任意一個')',在其左側都有一個'(
NYOJ 括號配對問題
時間限制:3000 ms | 記憶體限制:65535 KB 難度:3 輸入 第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行輸入多組輸入資料,每組輸入資料都是一個字串S(S的長度小於10000,且S不是空串),測試資料組數少於5組
NYOJ 2題------括號配對問題
括號配對問題 時間限制:3000 ms | 記憶體限制:65535 KB 難度:3 描述 現在,有一行括號序列,請你檢查這行括號是否配對。 輸入 第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行
nyoj2 括號配對問題
描述: 現在,有一行括號序列,請你檢查這行括號是否配對。 輸入: 第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行輸入多組輸入資料 每組輸入資料都是一個字串S(S的長度小於10000,且S不是空串), 測試資料組數少於5組。資料保證S中只含有"[", “]”
程式設計練習題:括號配對問題(Java)
問題描述:問題描述 : 輸入一個字串 裡面只含有 [ , ] , ( , ) 四種括號 ; 現要求判斷這個字串 是否滿足括號匹配 如 ([])() 是匹配的 ([)]是不匹配的
NYOJ-2-括號配對問題 棧
現在,有一行括號序列,請你檢查這行括號是否配對。 輸入 第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行輸入多組輸入資料,每組輸入資料都是一個字串S(S的長度小於10000,且S不是空串),測試資料組數少於5組。資料保證S中只含有”[“,”]
phpMyAdmin 的低階程式碼錯誤:括號配對
錯誤提示: Warning in ./libraries/sql.lib.php#601 count(): Parameter must be an array or an object that im
字串中括號配對檢查(java實現)
題目描述 對於一行程式碼(字串),裡面可能出現大括號“{}”、中括號“[]”和小括號“()”,請程式設計判斷改行程式碼的括號巢狀是否正確。“()”,“({})”,“printf(‘Hello Netease’)”等都是括號使用的正確方法,“(}”,”print(Hello
括號配對問題(C)
描述 現在,有一行括號序列,請你檢查這行括號是否配對。 輸入 第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行輸入多組輸入資料,每組輸入資料都是一個字串S(S的長度小於
第二道題:括號配對問題
這道題著實費了我不少時間(90分鐘==。),問題的關鍵是怎麼全面判斷括號是否配對,我原來的思路是比較各個括號的個數,毫無疑問,這會漏掉許多情況,比如 ] [ 、[ ( ] )…然後我就打算直接比較字串,由兩邊到中間,一 一比較,但這仍然會漏掉一些情況,比如 ([
POJ1068(ACM括號模擬)
Description Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two different ways: q By an integer seque
括號配對(用棧實現)
#include<iostream> #include<cstdio> #include<stack> using namespace std; int main() { char ch; stack<char>mysta
[ACM] 括號匹配問題(棧的使用)
括號配對問題 時間限制:3000 ms | 記憶體限制:65535 KB 難度:3 描述 現在,有一行括號序列,請你檢查這行括號是否配對。 輸入 第一行輸入一個數N(0<N&l
[NYOJ] 02括號配對問題(c語言鏈棧實現)
括號配對問題 時間限制:3000 ms | 記憶體限制:65535 KB 難度:3 描述現在,有一行括號序列,請你檢查這行括號是否配對。 輸入第一行輸入一個數N(0<N&