字符串的编辑距离

来源:互联网 发布:华懋科技知乎 编辑:程序博客网 时间:2024/04/27 20:31

字符串的编辑距离也被称为Levenshtein距离(Levenshtein Distance),一般用动态规划来实现。属于经典算法。

这里对编辑距离进行简单的分析(经典算法,所以记录一下:-))。

我们假定函数dist(str1, str2)表示字串str1转变到字串str2的编辑距离,那么对于下面3种极端情况,我们很容易给出解答(0表示空串)。

  • dist(0, 0) = 0
  • dist(0, s) = strlen(s)
  • dist(s, 0) = strlen(s)

对于一般的情况,dist(str1, str2)我们应该如何求解呢?

假定我们现在正在求解dist(str1+char1, str2+char2),也就是把"str1+char1"转变成"str2+char2"。在这个转变过称中,我们要分情况讨论:

  1. str1可以直接转变成str2。这时我们只要把char1转成char2就可以了(如果char1 != char2)。
  2. str1+char1可以直接转变成str2。这时我们处理的方式是插入char2。
  3. str1可以直接转成str2+char2。这时的情况是我们需要删除char1。

综合上面三种情况,dist(str1+char1, str2+char2)应该是三者的最小值。

用DP来做,我们只需要开辟一个二维数组即可。matrix[i][j]表示长度为i的A串转变为长度为j的B串的编辑距离。

实际应用题:ZJU1027(Human Gene Functions),参考解点击这里。在应用字符串编辑距离算法时,需要做一点点改变,因为该题不存在删除一个字符的操作。