最短编辑距离·动态规划
有字符串 A n = " a 1 a 2 a 3 . . . a n " , B m = " b 1 b 2 b 3 . . . b m " A_n="a_1 a_2 a_3...a_n",B_m="b_1 b_2 b_3...b_m" An="a1a2a3...an",Bm="b1b2b3...bm",通过插入字符、删除字符、替换字符三种操作将两字符串变成相同字符串,最少需要几步操作
设 D [ A n ] [ B m ] D[A_n][B_m] D[An][Bm]为两字符串的最短编辑距离, d i [ A n ] [ B m ] d_i[A_n][B_m] di[An][Bm]为两字符串的编辑距离
分析
因为 { A n , B m } \{A_n,B_m\} { An,Bm}存在插入、删除、替换三种操作。对一个字符串的插入操作都是可以在另一个字符串中以删除操作替代而实现相同的编辑效果(让两字符串更相似),因此我们仅以删除与替换操作对字符串进行处理。
所以 { A n , B m } \{A_n,B_m\} { An,Bm}上一阶段的可能情形为 { A n − 1 , B m } , { A n , B m − 1 } , { A n − 1 , B m − 1 } \{A_{n-1},B_{m}\},\{A_{n},B_{m-1}\},\{A_{n-1},B_{m-1}\} { An−1,Bm},{ An,Bm−1},{ An−1,Bm−1}