字符串编辑距离(Levenshtein距离)算法
- 介绍:
Levenshtein距离是一种计算两个字符串间的差异程度的字符串度量(string metric)。我们可以认为Levenshtein距离就是从一个字符串修改到另一个字符串时,其中编辑单个字符(比如修改、插入、删除)所需要的最少次数。 - 例子:
从字符串“kitten”修改为字符串“sitting”只需3次单字符编辑操作,如下:
sitten ( k -> s )
sittin ( e -> i )
sitting ( _ -> g )
因此“kitten”和“sitting”的Levenshtein距离为3。
代码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int lena, lenb;
char a[10010], b[10010];
int dp[10010];
void work() {
for(int j=1; j<=lenb; j++) dp[j] = j;
int t1, t2;
for(int i=1; i<=lena; i++) {
t1 = dp[0]++;
for(int j=1; j<=lenb; j++) {
t2 = dp[j];
if(a[i-1]==b[j-1])
dp[j] = t1;
else
dp[j] = min(t1, min(dp[j-1], dp[j]))+1;
t1 = t2;
}
}
printf("%d\n", dp[lenb]);
}
int main() {
scanf("%s%s", a, b);
lena = strlen(a);
lenb = strlen(b);
work();
return 0;
}
查看10道真题和解析