当前位置:网站首页>字母交换--字符串dp

字母交换--字符串dp

2022-08-02 10:55:00 WAWA源

在这里插入图片描述

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <map>
#include <queue>
using namespace std;
#define int long long
const int N = 200010;
int n,k;
string s;
vector<int>vec[30];
int f[1010][1010];

int cal(vector<int> vec)
{
    
	int n=vec.size();
	memset(f,0,sizeof f);
	
	for(int i=0;i+1<n;i++)
		f[i][i+1]=vec[i+1]-vec[i]-1;
	
	for(int i=2;i<n;i++)
	{
    
		for(int j=0;j+i<n;j++)
		{
    
			int l=j,r=j+i;
			f[l][r]=f[l+1][r-1]+abs(vec[r]-vec[l])-(r-l);
		}
	}
	int res=0;
	for(int i=0;i<n;i++)
		for(int j=i+1;j<n;j++)
			if(f[i][j]<=k)res=max(j-i+1,res);
	return res;
}
signed main()
{
    
	cin>>s>>k;
	for(int i=0;i<s.size();i++)
		vec[s[i]-'a'].push_back(i);
	
	int res=0;
	for(int i=0;i<26;i++)res=max(res,cal(vec[i]));
	cout<<res<<'\n';
}
原网站

版权声明
本文为[WAWA源]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_51282224/article/details/126115722