解法:暴力解法+滑动窗口

解法思路:

A的长度小于等于B的长度,所以我们的解决思路就是:

  1. 在b字符串中固定一个和 a 长度一样的区间 [ l , r ] ,让它每次向后移动一步先后移动。
  2. 每次移动,就枚举一下 b 的 [ l , r ] 区间,和 a 的 [ 0 , a.size() - 1 ] 的各个字符,判断对应字符是否不相等,如果不相等就统计一下当前的不相等的字符个数。
  3. 每次移动完成后,就更新一下最少的不相等的字符个数。

实现代码:

#include <iostream>
#include <string>
#include <limits.h>
using namespace std;

string a, b;

int ret = INT_MAX;

int main()
{
    cin >> a >> b;
    // 以a长度来滑动b字符串
    int l = 0, r = a.size() - 1;

    int m = a.size(), n = b.size();

    // 每次都滑动一位
    while(r < n)
    {
        int tmp = 0; // 计算当前不同字符的个数
        // 枚举每一位进行判断
        int i = l;
        for(int j = 0; j < m; j++)
        {
            if(a[j] != b[i]) tmp++;
            i++;
        }
        ret = min(tmp, ret);

        r++;
        l++;
    }

    cout << ret;
    return 0;
}