题目大意:
给你两个字符串,问你如何匹配可以改动最少的字符使得A字符串为B字符串的一个子串。
分析:
暴力匹配O(n^2)的复杂度足够了。注意记录下最优匹配时每个需要变换的位置。
代码:
#include<bits/stdc++.h>
using namespace std;
#define maxn 1050
char a[maxn];
char b[maxn];
int m,n;
int c[maxn];
int main()
{
scanf("%d%d",&n,&m);
scanf("%s",a);
scanf("%s",b);
int ans=maxn;
for(int i=0;i<=m-n;i++)
{
int num=0;
int t[maxn];
for(int j=0;j<n;j++)
{
if(a[j]!=b[j+i])
{
t[num]=j+1;
num++;
}
}
if(num<ans)
{
ans=num;
for(int i=0;i<num;i++)
{
c[i]=t[i];
}
}
}
if(ans==0)
{
printf("0\n");
return 0;
}
printf("%d\n%d",ans,c[0]);
for(int i=1;i<ans;i++)
{
printf(" %d",c[i]);
}
}