题解 | 小红的字符串修改
小红的字符串修改
https://www.nowcoder.com/practice/66e0054ff6b345afa47bcd4e8ceb72d7
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")