思路:定义dp[i][j]为,将a字符串前i个位置和b字符串前j个位置变得一样的最小代价。
//#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN = 1e3 + 5;
int dp[MAXN][MAXN];
int main()
{
string a, b;
while(cin >> a >> b)
{
memset(dp, 0, sizeof(dp));
int lena = a.size(), lenb = b.size();
for (int i = 1; i <= lena; i++) dp[i][0] = i;
for (int j = 1; j <= lenb; j++) dp[0][j] = j;
for (int i = 1; i <= lena; i++)
{
for (int j = 1; j <= lenb; j++)
{
if (a[i-1] == b[j-1])
dp[i][j] = min(dp[i-1][j-1], min(dp[i-1][j]+1,dp[i][j-1]+1));
else
dp[i][j] = min(dp[i-1][j-1]+1, min(dp[i-1][j]+1, dp[i][j-1]+1));
}
}
printf("%d\n", dp[lena][lenb]);
}
return 0;
}
/*
kitten
sitting
*/