求助一道题目
  • 板块学术版
  • 楼主rabbyte
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/3/30 22:08
  • 上次更新2023/10/28 05:07:57
查看原帖
求助一道题目
638235
rabbyte楼主2022/3/30 22:08

kl

题目大意:

给定一个字符串 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

2022/3/30 22:08
加载中...