题目链接
样例全过,但测试点一个不过
#include<bits/stdc++.h>
using namespace std;
string s;
const char a[10] = {'<', '(', '[', '{'};//按照括号的优先级排序
char st[300];
int check(char);//查找括号的优先级
int main() {
int n;
scanf("%d", &n);
for (int x = 0; x < n; x++) {
cin >> s;
int Top = 0, len = s.size();
for (int i = 0; i < len; i++) {
if (s[i] == '(' || s[i] == '[' || s[i] == '{' || s[i] == '<') {
if (Top == 0 || check(s[i]) <= check(st[Top])) {
st[++Top] = s[i];
} else {
Top = -2;
break;
}
}
if (s[i] == ')' || s[i] == ']' || s[i] == '}' || s[i] == '>') {
bool x1 = st[Top] == '(' && s[i] == ')';
bool x2 = st[Top] == '[' && s[i] == ']';
bool x3 = st[Top] == '<' && s[i] == '>';
bool x4 = st[Top] == '{' && s[i] == '}';//这里定义的几个变量没什么用,只是好读
bool push = (x1 || x2 || x3 || x4) && check(s[i]) > check(st[Top]);
if (push) {
Top--;
} else {
Top = -1;
break;
}
}
}
if (Top == 0) {
printf("YES\n");
} else {
printf("NO\n");
}
}
return 0;
}
int check(char c) {
for (int i = 0; i <= 3; i++) {
if (a[i] == c) {
return i;
}
}
}