Edit Distance (hard)
a) Insert a character
b) Delete a character
c) Replace a characterBasic Idea:
Input: string: A, B
Induction rule:
dp[i][j] 表示 A[:i] 和 B[:j] 之间的最小 edit distance;
假设我们只考虑对 A 进行操作(只edit一个字符串最终结论是相同的,有文章证明),
当 A[i]==B[j] 的时候,不需要edit,此时 dp[i][j] = dp[i-1][j-1];
当 A[i] != B[j] 时,我们有对A进行 insert, delete, replace 三种选择:
1. 进行 insert,在A[i]位置插入B[j],抵消了B[j], 使得 dp[i][j] = dp[i][j-1] + 1;
2. 进行 delete,删掉A[i], 使得此时的问题看上去和 {A[:i-1],B[:j]} 是一样的,
使得 dp[i][j] = dp[i-1][j] + 1;
3. 进行 replace, 将 A[i] 换成 B[j], 使得 dp[i][j] = dp[i-1][j-1] + 1;
最终 dp[i][j] 的值就是如上三种操作产生的值中最小的。
Base Case:
dp[0][0] = 0;
dp[0][j] = j;
dp[i][0] = i;Last updated