前言
今天看了Stanford编辑距离代码,感觉写得不错,写一篇博客记录下。
编辑距离的定义是:从字符串A到字符串B,中间需要的最少操作权重。这里的操作权重一般是:
- 删除一个字符(deletion)
- 插入一个字符(insertion)
- 替换一个字符(substitution)
- 他们的权重都是1
编辑距离的算法一般用dp。很多博客写到这里就结束了,因此十分晦涩难懂。因为没有对其加主谓语,完全就是耍流氓。正确的说法应该是:
- 删除A末尾一个字符(deletion)
- 用B末尾插入A末尾一个字符(insertion)
- 把A末尾字符替换成B末尾的一个字符(substitution)
为什么?
算法及实现
我们举一个实际例子
- 长度为m的字符串A,len(A) = m
- 长度为n的字符串B,len(B) = n
则A到B的编辑距离dp公式如下:
先不要急着看懂,我慢慢解释。
- Q2: 为什么d是一个[m+1][n+1]大小的二维数组,为什么d数组要比字符串长度大一ÿ