#include <bits/stdc++.h> using namespace std; int main() { string s, t; cin >> s >> t; int n = s.size(), m = t.size(); // 只开一行滚动数组,空间 O(m) vector<int> prev(m + 1), cur(m + 1); for (int j = 0; j <= m; ++j) prev[j] = j; // s 为空时,需要 j 次插入 for (int i = 1; i <= n; ++i) { cur[0] = i; // t 为空时,需要 i 次删除 for (int j = 1; j <= m; ++j) { int cost = (s[i - 1] == t[j - 1]) ? 0 : 1; cur[j] = min({ prev[j] + 1, // 删除 s[i-1] cur[j - 1] + 1, // 在 s 里插入 t[j-1] prev[j - 1] + cost // 替换/匹配 s[i-1] -> t[j-1] }); } swap(prev, cur); } cout << prev[m] << '\n'; return 0; }