一、实践题目
编辑距离问题
二、问题描述
设A和B是2个字符串。要用最少的字符操作将字符串A转换为字符串B。
字符操作包括 (1)删除一个字符; (2)插入一个字符; (3)将一个字符改为另一个字符。
将字符串A变换为字符串B所用的最少字符操作数称为字符串A到 B的编辑距离,记为d(A,B)。 对于给定的字符串A和字符串B,计算其编辑距离 d(A,B)。
输入格式:第一行是字符串A,文件的第二行是字符串B。
输出格式:输出编辑距离d(A,B)。
三、算法描述
本题可以通过填表的方式解决。解题的思路是:建立一个二维数组,将字符串A作为行的表头,字符串B作为列的表头。表格初始化如下:

填表的方法为从左到右从上到下,表格中的数字代表从行到列所需要变换的最少次数。确定一个表格内容主要比较三种变换方法。
(1)删除:dist[i][j-1]+1
(2)增加:dist[i-1][j]+1
(3)替换:首先判断字符串A的第i-1个,与字符串B的j-1个是否相同,如果相同,则dist[i-1][j-1]不变,否则dist[i-1][j-1]=dist[i-1][j-1]+1
四、算法时间及空间复杂度分析
按照算法分析,本题实际上是对一个二维数组进行遍历,因此时间复杂度为O(m x n),空间复杂度为O(m x n)。
五、心得体会
刚看到这道题的时候思路很乱,觉得要比较的东西比较多,也不知道以什么规则比较,尝试使用填表的思想却不知道横纵坐标该怎么确定好。后来百度参考了一下别人的做法,知道了表格应该怎么确定,以及三种比较的内容,对于本题的做法就比较明晰了。和搭档讨论了一下之后便把代码一点点打出来。
来源:https://www.cnblogs.com/chenZT/p/9999099.html