给出两个字符串a,b,求a和b的编辑距离。
dp[i][j],字符串a:1-i 和字符串b:1-j 最小距离。
对于当前a[i]和b[j].如果a[i]等于b[j],那么dp[i][j]=dp[i][j]
如果不相等的话可能a变,可能b变。dp[i][j]=min(dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]+1)
#include <iostream>
#include <cstring>
#include <cstdio>
const int MAX = 1e3 + 5;
char arr1[MAX];
char arr2[MAX];
int dp[MAX][MAX];
int tmp_min(int a, int b, int c)
{
if (a > b)
a = b;
if (a > c)
return c;
else
return a;
}
int main()
{
scanf("%s%s", arr1 + 1, arr2 + 1);
int lenth1 = strlen(arr1 + 1);
int lenth2 = strlen(arr2 + 1);
for (int i = 0; i <= lenth1; ++i)
dp[i][0] = i;
for (int j = 0; j <= lenth2; ++j)
dp[0][j] = j;
for (int i = 1; i <= lenth1; ++i)
{
for (int j = 1; j <= lenth2; ++j)
{
int cost = arr1[i] == arr2[j] ? 0 : 1;
dp[i][j] = tmp_min(dp[i - 1][j] + 1, dp[i][j - 1] + 1, dp[i - 1][j - 1] + cost);
}
}
std::cout << dp[lenth1][lenth2] << std::endl;
return 0;
}