题目描述
所谓最长公共子串,比如串A:“abcde”,串B:“jcdkl”,则它们的最长公共子串为串“cd”,即长
度最长的字符串,且在两个串中都作为连续子串出现过。
给定两个长度都为n 的字符串,对于字符串大师的你来说,求它们的最长公共子串再简单不过了。
所以现在你有k 次修改机会,每次你可以选择其中某个串的某个位置,将其修改成任意字符。
你需要合理使用这k 次修改机会,使得修改之后两个串的最长公共子串最长。相信对于字符串大师
的你来说,这个问题也难不倒你。
暴力
n^2枚举然后n去统计
#include<cstdio>
#include<algorithm>
#define fo(i,a,b) for(i=a;i<=b;i++)
using namespace std;
const int maxn=300+10;
char s1[maxn],s2[maxn];
int i,j,k,l,r,t,n,m,ans;
int main(){
freopen("master.in","r",stdin);freopen("master.out","w",stdout);
scanf("%d%d",&n,&k);
scanf("%s",s1+1);
scanf("%s",s2+1);
fo(i,1,n)
fo(j,1,n){
t=0;r=0;
fo(l,1,min(n-i+1,n-j+1)){
if (s1[i+l-1]!=s2[j+l-1]){
if (t<k) t++;
else break;
}
r++;
}
ans=max(ans,r);
}
printf("%d\n",ans);
}