链接:点击打开链接
题意:给出两个字符串,两个字符串中长度都为s的子串最多可以有k个位置不同,求最大的s
代码:
#include <map>
#include <set>
#include <queue>
#include <string>
#include <math.h>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
const int siz=4005;
char s1[siz],s2[siz];
int main(){
int t,i,j,k,n,m,l,r,ans,tmp;
scanf("%d",&t);
while(t--){
scanf("%d",&k);
scanf("%s%s",s1,s2);
n=strlen(s1);
m=strlen(s2);
ans=0;
for(i=0;i<n;i++){ //尺取,两个字符串中每个位置和另一个字符串比
l=r=tmp=0;
for(;s1[i+r]&&s2[r];r++){
if(s1[i+r]!=s2[r])
tmp++;
while(tmp>k){
if(s1[i+l]!=s2[l])
tmp--;
l++;
}
ans=max(ans,r-l+1);
}
}
for(i=0;i<m;i++){
l=r=tmp=0;
for(;s1[r]&&s2[i+r];r++){
if(s1[r]!=s2[i+r])
tmp++;
while(tmp>k){
if(s1[l]!=s2[i+l])
tmp--;
l++;
}
ans=max(ans,r-l+1);
}
}
printf("%d\n",ans);
}
return 0;
}