题目
Problem Description
设A和B是两个字符串。我们要用最少的字符操作次数,将字符串A转换为字符串B。这里所说的字符操作共有三种:
1.删除一个字符;
2.插入一个字符;
3.将一个字符改为另一个字符。
对任给的两个字符串A和B,计算出将字符串A变换为字符串B所用的最少字符操作次数。
第一行为字符串A;第二行为字符串B;字符串A和B的长度均小于200。
Output
Sample Output
解题思路
定义:
源字符串和目标字符串分别为 source, taregt
状态 dp[i][j] 表示:
source 的前 i 个字符组成的子字符串
与
target 的前 j 个字符组成的子字符串
的编辑距离
操作:
从 source 的第一个字符开始,跟 target 的字符逐个比对;再转移到 source 的下一个字符,跟 target 的字符逐个比对;如此类推,直到 source 的全部字符都比对完。
如果 source 的第 i 个字符和 target 的第 j 个字符相等,那么编辑距离跟状态 dp[i - 1][j - 1] 的编辑距离相等:
dp[i][j] = dp[i - 1][j - 1];
如果不相等,那么需要看 dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]:
从状态 dp[ i ][j - 1] 到状态 dp[i][j],从 source 中删除一个字符即可;
从状态 dp[i - 1][ j ] 到状态 dp[i][j],往 source 中添加一个字符即可;
从状态 dp[i - 1][j - 1] 到状态 dp[i][j],替换 source 中的一个字符即可。
上面三种操作中选择编辑距离最小的一个。
解题代码