站外求助,没分
查看原帖
站外求助,没分
1004026
__Charlie_Chen__楼主2023/10/6 22:22

题目链接
样例全过,但测试点一个不过

#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;
		}
	}
}
2023/10/6 22:22
加载中...