题意:要求你从只含有()的字符串中删除一些使得剩下的字符串不会有成括号的情况。
思路:从左边开始找(,从右边开始找),优先匹配,不行则停止。
#include<bits/stdc++.h>
using namespace std;
const int maxn=10005;
int sum1[maxn],sum2[maxn];
char s1[maxn];
int ans1[maxn];
int main()
{
int n,i,j,t;
cin>>(s1+1);
for(i=1;i<strlen(s1+1);i++)
{
if(s1[i]=='(')
sum1[i]=sum1[i-1]+1,sum2[i]=sum2[i-1];
else
sum2[i]=sum2[i-1]+1,sum1[i]=sum1[i-1];
}
int l=1,r=strlen(s1+1),ans=0,idx=0,cnt=0,flag=0;
while(l<=r)
{
if(flag==0)
{
if(s1[l]=='(')
{
flag=l;
}
l++;
}
else
{
if(s1[r]==')')
{
ans1[cnt++]=flag;
ans1[cnt++]=r;
ans++;
flag=0;
}
r--;
}
//cout<<l<<" "<<r<<" "<<flag<<" "<<ans<<endl;
}
if(ans>0)
{
cout<<1<<endl<<2*ans<<endl;
sort(ans1,ans1+cnt);
for(i=0;i<cnt;i++) cout<<ans1[i]<<" ";
cout<<endl;
}
else
cout<<0<<endl;
return 0;
}