给定一串由()和[]组成的字符串。如果我们规定以下的字符串是合法的字符串:(1) 空串是合法的字符串(2) 如果A、B都是合法的,那么AB也是合法的字符串。(3) 如果A是合法的,那么(A)和[A]都是合法的字符串。也就是说,所有左右括号必须配对,且不能“切开括号”(如“[(])”或“([)]”)。输入输入先是一个正整数n,代表有n个字符串。接下来是n行字符串,每个字符串一行,注意, 可能有空串
。输出对于每组数据,若是合法的字符串,则在单独的一行输出Yes,不然则出No。样例输入
6
([])
(([()])))
([()[]()])()
(([(])))
()[][()]
样例输出
Yes No Yes No Yes Yes注意
输入中可能有空串。
#include <iostream>
#include <stack>
#include<string>
#include <string.h>
using namespace std;
char a[100000000]={};
int main() {
int T;
cin>>T;
getchar();
while (T--) {
stack<char> st;
cin.getline(a, 100000);
long len= strlen (a);
for (int i=0; i<len; i++) {
if (a[i]==' ') {
continue;
}
else if (a[i]=='('||a[i]=='['){
st.push(a[i]);
}
else if (a[i]==')') {
if (st.size()&&st.top()=='(') {
st.pop();
}else{
st.push(a[i]);
}
}
else if (a[i]==']') {
if (st.size()&&st.top()=='[') {
st.pop();
}else{
st.push(a[i]);
}
}
}
if (st.size()) {
cout<<"No"<<endl;
}else
cout<<"Yes"<<endl;
}
return 0;
}