字符串编辑距离(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;
}

全部评论

相关推荐

2024-12-29 19:48
河北科技大学 Java
没事就爱看简历:问题不在于简历:1、大学主修课程学那么多应用语言,作为计算机专业是很难理解的。 2、技能部分,每一个技能点的后半句话,说明对熟练,熟悉的标准有明显误会。 3、项目应该是校企合作的练习吧,这个项目你负责什么,取得了哪些成果都没有提及,只是列举了你认为有技术含量的点,而这些都有成熟的实现。
点赞 评论 收藏
分享
明天不下雨了:我靠2022了都去字节了还什么读研我教你****:你好,本人985电子科大在读研一,本科西南大学(211)我在字节跳动实习过。对您的岗位很感兴趣,希望获得一次投递机会。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务