题意:
给你一个字符串, 告诉你喜欢的字母,和改变字母的次数,求在次数内 在长连续喜欢字母的长度?
思路:
直接令dp[i][j] 表示改变i 次,喜欢字母为j 的最大长度。
直接n*n*26预处理即可。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1500 + 10;
char s[maxn];
int dp[maxn][30];
int main(){
int n;
scanf("%d",&n);
scanf("%s", s);
int len = strlen(s);
for (int i = 0; i < 26; ++i){
for (int j = 0; j < n; ++j){
int sum = 0;
for (int k = j; k < len; ++k){
if (s[k] == i+'a')++sum;
dp[k-j+1-sum][i] = max(dp[k-j+1-sum][i], k-j+1);
}
}
}
int q;
scanf("%d",&q);
char cmd[3];
while(q--){
int x,y;
scanf("%d%s",&x, cmd);
int ans = 0;
for (int i = 0; i <= x; ++i){
ans = max(ans, dp[i][cmd[0]-'a' ]);
}
printf("%d\n", ans);
}
return 0;
}