/* ---------- STL Libraries ---------- */ // IO library #include #include #include #include #include // algorithm library #include #include #include #include // container library #include #include #include #include #include #include #include #include #include #include /* ---------- Namespace ---------- */ using namespace std; /* ---------- Type ---------- */ using ll = long long; #define int ll #define P pair /* ---------- Constants */ const double PI = 3.141592653589793238462643383279; const ll MOD = 1e9 + 7; const int INF = 1LL << 55; /* v-v-v-v-v-v-v-v-v Main Part v-v-v-v-v-v-v-v-v */ signed main() { int N, M; string s, t; cin >> N >> M >> s >> t; int dp[N+1][M+1]; fill(dp[0], dp[N+1], INF); dp[0][0] = 0; for (int i = 1; i <= N; i++) dp[i][0] = i; for (int j = 1; j <= M; j++) dp[0][j] = j; for (int i = 1; i <= N; i++) { for (int j = 1; j <= M; j++) { dp[i][j] = min(dp[i-1][j] + 1, dp[i][j-1] + 1); if (s[i-1] == t[j-1]) { dp[i][j] = min(dp[i][j], dp[i-1][j-1]); } else { dp[i][j] = min(dp[i][j], dp[i-1][j-1] + 1); } } } cout << dp[N][M] << endl; return 0; }