// stack #include <stdio.h> #include <string.h> char str[11000]; char stack1[11000]; int main() { int N; scanf("%d",&N); while(N--) { int i,j,top1; memset(str,0,sizeof(str)); memset(stack1,0,sizeof(stack1)); scanf("%s",str); top1=1; for(i=0;i<strlen(str);i++) { if(str[i]=='('||str[i]=='[') stack1[top1++]=str[i]; if(str[i]==')') { if(stack1[top1-1]=='(') --top1; else stack1[top1++]=str[i]; } if(str[i]==']') { if(stack1[top1-1]=='[') --top1; else stack1[top1++]=str[i]; } } if(top1==1) printf("Yes\n"); else printf("No\n"); } return 0; } /// vector #include <iostream> #include <cstring> #include <vector> #include <cstdio> using namespace std; bool isok(char a, char b) // 字符a 和 b 是否配对 { if (a == '(' && b == ')') return 1; if (a == '[' && b == ']') return 1; return 0; } int main() { int T, i, j; char s[10000]; vector<char> stk; cin >> T; while (T--) { scanf("%s", s); stk.clear(); int sign = 1; for (i = 0; i < strlen(s); i++) { if (s[i] == '[' || s[i] == '(') stk.push_back(s[i]); else if (isok(stk.back(), s[i])) stk.pop_back(); else { sign = 0; break; } } if (!stk.empty()) sign = 0; if (sign == 0) cout << "No\n"; else cout << "Yes\n"; } return 0; }