1. 程式人生 > >【NYOJ】括號配對問題

【NYOJ】括號配對問題

括號配對問題

時間限制: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>
#include<algorithm>
using namespace std;
int main(){
	int n;
	scanf("%d",& n);
	while (n--){
		stack<char> s;
		char str[10000+5];
		scanf("%s",str);
		int l =strlen(str);
		bool flag=true;
		for (int i=0;i<l;i++){
			if (str[i]=='('||str[i]=='['){
				s.push(str[i]);				
			}
			else{ 
				if(!s.empty()) {
					 if(str[i]==')'){
						if(s.top()=='(')
							s.pop();
						else {
							flag=false;
							 break;
						}
						}
					else {
						if(s.top()=='[')
							s.pop();
						else {
							flag=false;
							 break;	
							}
						}
				}
				else {
				flag=false;
				 break;
				}
				 }
		}
		if(!flag) printf("No\n");
		else if(!s.empty()) printf("No\n");
		else printf("Yes\n");
	}
	return 0;

}