1. 程式人生 > >ACM 括號配對問題

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&