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

int main(){
    // 编辑距离,字符串-->动态规划
    // 需要构建dp数组
    string word1,word2;
    cin>>word1>>word2;

    int n = word1.length();
    int m = word2.length();

    // 有一个字符串为空
    if(n*m == 0){
        cout<<m+n<<endl;
    }
    // dp数组
    vector<vector<int>> DP(n+1,vector<int>(m+1));
    // 边界状态初始化
    for(int i = 0; i < n+1; ++i){
        DP[i][0] = i;
    }
    for(int j = 0; j < m+1; ++j){
        DP[0][j] = j;
    }
    // 计算所有的dp值
    for(int i = 1; i < n+1; ++i){
        for(int j = 1; j < m+1; ++j){
            int left = DP[i][j-1] + 1;
            int down = DP[i-1][j] + 1;
            int left_down = DP[i-1][j-1];
            if(word1[i-1]!=word2[j-1]){
                left_down++;
            }
            DP[i][j] = min(left,min(down,left_down));
        }
    }
    cout<<DP[n][m]<<endl;
}