直接上干货。
什么叫编辑距离?从字符串str1到字符串str2需要经过多少次编辑。每次编辑只能增加 / 删除 / 替换1个字符。计算出从str1到str2最小的编辑距离(Minimum Edit Distance),用此可作为两个字符串之间的相似度的衡量。
定义符号:
对于两个字符串strA, strB,它俩的长度分别记为lenA, lenB.
MED:最小的编辑距离(Minimum Edit Distance)
记C[i, j] = MED{ strA[0...i], strB[0...j] }. 即C数组中存储的是 以i j 结尾的两个字符串的最小编辑距离。
现在开始分析:
对于strA[0...lenA-1] 和 strB[0...lenB-1],
当计算C[i][j]时,我们认为C数组之前的值都已经计算好了,我们认为经过C[i-1][j-1]次最少次数的编辑之后,处理过的strA[0...i-1] 与处理过的 strB[0...j-1] 相等。
当计算C[i][j]时,不要去管i与j后面的字符串。
若strA[i] == strB[j],则C[i][j] = C[i-1][j-1].这是最简单的情况。
当strA[i] != strB[j]时,就要分情况讨论了:
1.删除strA[i],此时等价于要计算MED{ strA[0...i-1], strB[0...j] },显然,这就是C[i-1][j],此时C[i][j] = C[i-1][j] + cost_Del。
2.删除strB[j],此时等价于要计算MED{ strA[0...i], strB[0...j-1] },显然,