#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;
}