专栏文章

题解:P14172 【MX-X23-T2】括号串

P14172题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minofjx8
此快照首次捕获于
2025/12/02 05:44
3 个月前
此快照最后确认于
2025/12/02 05:44
3 个月前
查看原文
考场上因为认为括号可以改无限次被这道题硬控了。
题目大意:给你一个括号串,判断它是否合法,若不合法就把一对相反的括号改正再次检查。
直接在原字符串上模拟即可。

AC Code:

CPP
#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,t;
	string s;
	scanf("%d",&t);
	while(t--){
		cin>>n>>s;
		int bal=0;
		bool flag=1;
		for(int i=0;i<n;++i){
			if(s[i]=='(') bal++;
			else bal--;
			if(bal<0) flag=0;
		}
		if(flag&&bal==0){
			cout<<"Yes"<<'\n';
			continue;
		}
		if(bal!=0){
			cout<<"No"<<'\n';
			continue;
		}
		int pos=-1;
		for(int i=0;i<n;++i){
			if(s[i]=='(') bal++;
			else bal--;
			if(bal<0){
				pos=i;
				break;
			}
		}
		if(pos!=-1&&pos<n-1){
			swap(s[pos],s[pos+1]);
			bal=0;
			flag=1;
			for(int i=0;i<n;++i){
				if(s[i]=='(') bal++;
				else bal--;
				if(bal<0){
					flag=0;
					break;
				}
			}
			if(flag&&bal==0){
				cout<<"Yes"<<'\n';
				continue;
			}
		}
		cout<<"No"<<'\n';
	}
    return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...