ABC 307 D Mismatched Parentheses

题解
现在有个长度为N的字符串s,其中s由(,)和小写字母组成,每个)都要与其左边的(配成一对,并且将他们和中间的部分给删除掉。输出最后的s

思路
我们首先设最后的答案为空串,然后模拟整个过程就行了,一旦遇到(,我们就用cnt进行计数。一旦遇到),就在答案里一直删直到遇到最近的(为止。其他情况直接加到答案即可

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=2e5+10;
int nextl[maxn];
vector<pair<int,int> >ds; 
char s[maxn];

struct node
{
	char flag;
	int id;
};

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	
	int n;
	cin>>n;
	int cnt=0;
	string ans="";
	for(int i=1;i<=n;i++)
	{
		char flag;
		cin>>flag;
		if(cnt>0&&flag==')')
		{
			while(ans.back()!='(') ans.pop_back();
			ans.pop_back();
			cnt--; 
		}
		else
		{
			if(flag=='(') cnt++;
			ans+=flag;
		}
	}
	cout<<ans<<endl;
	return 0;
}
posted on 2024-06-03 20:45  Linear_L  阅读(7)  评论(0编辑  收藏  举报