
题目大意:
给定一个字符串 s,讲 s 分成三个字符串,第一个字符串里只能由 a 第二个字符串里只能有 b 第三个字符串里只能由 a
现在可以删除其中的一部分字符,使得它能被分成这三个字符串,求最多保留多少字符
#include<bits/stdc++.h>
using namespace std;
string s;
int qzha[5010],qzhb[5010],tmp,ans=2e9;
/*
思路:暴力枚举端点,O(n)预处理前缀和
时间复杂度:O(n^2+n)
*/
int main()
{
cin>>s;
int n=s.size();
s=" "+s;
for(int i=1;i<=n;i++)
{
qzha[i]=qzha[i-1]+(s[i]=='a'?1:0);
qzhb[i]=qzhb[i-1]+(s[i]=='b'?1:0);
}
qzha[n+1]=qzha[n];
qzhb[n+1]=qzhb[n];
for(int i=0;i<=n+1;i++) //枚举的是前面的位置
{
for(int j=i;j<=n+1;i++)
{
tmp=0;
tmp+=qzhb[i];
tmp+=qzha[j]-qzha[i];
tmp+=qzhb[n]-qzhb[j];
ans=min(ans,tmp);
}
}
cout<<ans;
return 0;
}
得到帮助会给关注的qwq