题目大意:

给你两个字符串,问你如何匹配可以改动最少的字符使得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]);
    }
}