NYOJ - 2:括號配對問題

括號配對問題

來源:NYOJ

標籤:數據結構,棧

參考資料:

相似題目:

題目

現在,有一行括號序列,請你檢查這行括號是否配對。

輸入

第一行輸入一個數N(0<N<=100),表示有N組測試數據。後面的N行輸入多組輸入數據,每組輸入數據都是一個字符串S(S的長度小於10000,且S不是空串),測試數據組數少於5組。數據保證S中只含有"[", “]”, “(”, “)” 四種字符

輸出

每組輸入數據的輸出佔一行,如果該字符串中所含的括號是配對的,則輸出Yes,如果不配對則輸出No

輸入樣例

3
[(])
(])
([[]()])

輸出樣例

No
No
Yes

參考代碼

#include<iostream>
#include<string>
#include<stack>
using namespace std;

int N;
string S;
stack<char> stk;

int main(){
	scanf("%d",&N);
	while(N--){
		while(!stk.empty()){
			stk.pop();
		}
		cin>>S;
		int flag=1;
		for(int i=0;i<S.length();i++){
			if(S[i]=='[' || S[i]=='('){
				stk.push(S[i]);
			}
			else{
				if(stk.empty()){
					flag=0;
					break;
				}
				char ch=stk.top();
				stk.pop();
				
				if(S[i]==']' && ch=='[' || S[i]==')' && ch=='('){
					continue;
				}
				else{
					flag=0;
					break;
				}
			}
		}
		if(flag && stk.empty()) cout<<"Yes"<<endl;
		else cout<<"No"<<endl;
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章