解法:暴力解法+滑动窗口
解法思路:
因为A的长度小于等于B的长度,所以我们的解决思路就是:
- 在b字符串中固定一个和 a 长度一样的区间 [ l , r ] ,让它每次向后移动一步先后移动。
- 每次移动,就枚举一下 b 的 [ l , r ] 区间,和 a 的 [ 0 , a.size() - 1 ] 的各个字符,判断对应字符是否不相等,如果不相等就统计一下当前的不相等的字符个数。
- 每次移动完成后,就更新一下最少的不相等的字符个数。
实现代码:
#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;
}

京公网安备 11010502036488号