问题描述:
设A 和B 是2 个字符串。要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括: (1) 删除一个字符;(2) 插入一个字符;(3) 将一个字符改为另一个字符
也就是说将字符串A 变换为字符串B 所用的最少字符操作数称为字符串A 到B 的编辑距离,记为d(A,B)。试设计一个有效算法,对任给的2 个字符串A 和B,计算出它们的编辑距离d(A,B)
算法设计:对于给定的字符串A 和字符串B,计算其编辑距离d(A,B)
问题分析
对于两个字符串,仅进行三种操作删除、插入、转换,即为:
例如:
- setting —— seteing : 将字母t转换成字母e;
- cat——cats : 插入字母s
- shots——shot : 删除字母s
对于这类问题来说,
(1)首先考虑A串的第一个字符
存在字符串A和B,长度分别是L1,L2.对于字符串A来说,如果和字符串B的第一个是一样的,则只需考虑A[2,….L1]和B[2….L2]之间的距离即可,如果不一样,则可以
- 删除第一个字符,仅计算A[2….L1]和B[1….L2]的距离
- 修改第一个字符 ,其余计算A[2….L1]和B[2….L2]的距离
- 将字符串B的第一个插入到字符串A之前 ,则计算A[1….L1]和B[2….L2]
(2)考虑字符串A的第i个字符和字符串B的第j个字符
如果A串的第i个字符和B串的第j个字符相等,即A[i]=B[j],则只需要计算A[i…lenA]和B[j…lenB]之间的距离即可。如果不相等,则:
- 删除第i个字符,计算A[i+1….L1]和B[j….L2]的之间距离
- 修改第i个字符,计算A[i+1…..L1]和B[j….L2]之间的距离
- 插入:将字