编辑距离自行百度....
a="123"
b="12"
a变成b需要多少个操作,一共三种操作,插入,删除,替换,这里的话,a删除3变为b,因此,编辑距离为1;
python
def edit_distance(a,b):
dp = [[0 for j in range(len(b)+1)] for i in range(len(a)+1)]
for i in range(1,len(a)+1):
dp[i][0]=i
for j in range(1,len(b)+1):
dp[0][j]=j
for i in range(1,len(a)+1):
for j in range(1,len(b)+1):
temp = 1 if dp[i-1][j-1]!=dp[i][j] else 0
dp[i][j] = min(dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1] + temp )
return dp[len(a)][len(b)]
edit_distance('123','12')
c++
#include<bits/stdc++.h>
#include<iostream>
#include<set>
#define ll long long
#define INF 0xffffffff
#define rep(i,x,y) for(register int i=x;i<=y;++i)
using namespace std;
const int N = 1005;
int dp[N][N], n=0;
int main()
{
int i, j, k, n, m;
string a, b;
a = "abc";
b = "adc";
for (i = 0; i < a.length(); i++)
{
dp[i][0] = i+1;
}
for (j = 0; j < b.length(); j++)
{
dp[0][j] = j+1;
}
for (i = 1; i < a.length(); i++)
{
for (j = 1; j < b.length(); j++)
{
dp[i][j] = min(min(dp[i - 1][j] + 1, dp[i][j - 1] + 1), dp[i - 1][j - 1] + dp[i - 1][j - 1] == dp[i][j] ? 0 : 1);
}
}
cout << dp[a.length() - 1][b.length() - 1];
return 0;
}