编辑距离问题 解题分析

来源:互联网 发布:首届全球程序员节 官网 编辑:程序博客网 时间:2024/06/16 10:14

编辑距离问题:设A和B是2个字符串。要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括(1)删除一个字符;(2)插入一个字符;(3)将一个字符改为另一个字符。将字符串A变换为字符串B所用的最少字符操作数称为字符串A到B的编辑距离,记为d(A,B)。

这一题很多人想到最长公共子串了,Good!但是做出来还要再多一点DP的感觉。

准备:a[0]~a[i-1]的子串记为ai,a[0]~a[i-2]的子串记为a(i-1),

            b[0]~b[j-1]的子串记为bj,b[0]~b[j-2]的子串记为b(j-1)

状态:c[i][j]记录ai与bj的最优编辑距离

结果:c[m][n],其中m、n分别是a、b的串长

初值:b串空,要删a串长个字符;a串空,要插b串长个字符

转移方程:当a[i-1]=b[j-1]时,c[i][j]=c[i-1][j-1],否则,

                    c[i][j]=min(c[i-1][j-1]+1,c[i][j-1]+1,c[i-1][j]+1)

说明:c[i-1][j-1]+1:改a[i-1]为b[j-1];

            c[i][j-1]+1:a[i-1]后插入b[j-1];

            c[i-1][j]+1:删a[i-1]。

学无止境!大家努力!

原创粉丝点击