C++ 题中只能把其中一个任意一个字母替换成其在字母表中相邻的字母,所以不是计算最长相同子串的问题

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s, t;
    cin >> s >> t;
    int min_cnt=25000;
    string sub;
    for (int i=0; i<=t.size()-s.size(); i++) { // 遍历t
        int cnt=0;
        for (int j=0; j<s.size(); j++) { // 把s转换为t的子串
            int diff = t[i+j]>s[j] ? (t[i+j]-s[j]) : (s[j]-t[i+j]);
            cnt += min(diff, 26-diff); // 和 mod25 的结果不一样
            // cout << t[i+j] << ' ' << s[j] << ' ' << cnt << endl;
            if (cnt > min_cnt) break;              
        }
        if (cnt < min_cnt) min_cnt = cnt;
    }
    // 把其中一个任意一个字母替换成其在字母表中相邻的字母
    // 不是直接一次能改的,z->x 需要2次(z->y->x)
    // 可用Ascii码计算得到
    cout << min_cnt << endl;
    return 0;
}
// 64 位输出请用 printf("%lld")