括號配對問題
來源: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;
}