#include #include #include #include #include #include #include #include #include #include #include using namespace std; int n, m; char s[1001],t[1001]; int dp[1001][1001]; /*void solve(){ for (int i = 0; i <= n; ++i){ for (int j = 0; j <= m; ++j){ if (i == 0){ dp[i][j] = j; continue; } if (j == 0){ dp[i][j] = i; continue; } //dp[i][j]=1000000; if (s[i] != t[j]){ dp[i + 1][j + 1] = min(dp[i][j + 1] + 1, min(dp[i + 1][j] + 1, dp[i][j])); } else if (s[i] == t[j]){ dp[i + 1][j + 1] = min(dp[i][j], min(dp[i][j + 1] + 1, dp[i + 1][j] + 1)); } //dp[i+1][j+1]=min(dp[i+1][j+1],dp[i][j+1]+1); //dp[i+1][j+1]= min(dp[i+1][j+1],dp[i+1][j]+1); } } }*/ int main(){ cin >> n >> m >> s >> t; /*for (int i = 0; i> s[i]; } for (int i = 0; i> t[i]; }*/ //solve(); for (int i = 0; i <= n; ++i){ for (int j = 0; j <= m; ++j){ if (i == 0){ dp[i][j] = j; continue; } if (j == 0){ dp[i][j] = i; continue; } //dp[i][j]=1000000; if (s[i - 1] != t[j - 1]){ dp[i][j] = min(dp[i - 1][j] + 1, min(dp[i][j - 1] + 1, dp[i - 1][j - 1] + 1)); } else if (s[i - 1] == t[j - 1]){ dp[i][j] = dp[i - 1][j - 1]; } //dp[i+1][j+1]=min(dp[i+1][j+1],dp[i][j+1]+1); //dp[i+1][j+1]= min(dp[i+1][j+1],dp[i+1][j]+1); } } cout << dp[n][m] << endl; return 0; }