动态规划——最短编辑距离
编辑距离是指两个字串之间,从一个转成另一个所需要的最少编辑操作次数,许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。
问题
给定两个字符串S1和S2,求S2和S1的编辑距离,即至少需要经过多少步编辑操作才可以将S1变成S2。
分析
定义“状态” edit[i][j],表示将S1的长度为i的前缀S1[1...i]到S2的长度为j的前缀S2[1....j]的编辑距离。则显然有:
if (i == 0 && j == 0) edit[i][j] = 0; else if (i == 0 && j > 0) edit[i][j] = j; else if(j == 0 && i > 0) edit[i][j] = i; else edit[i][j] = min{edit[i-1][j] + 1, edit[i][j-1] + 1, edit[i-1][j-1] + f(i, j)} //其中,当第一个字符串的第i个字符不等于第二个字符串的第j个字符时,f(i, j) = 1; 否则 = 0.