题解
现在有个长度为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;
}
标签:cnt,ABC,int,back,flag,Parentheses,maxn,Mismatched,ans
From: https://www.cnblogs.com/lulu7/p/18229621