题解
在题目所求的编辑距离是指字符串 a 转换成字符串 b 所需最小的操作步骤。
a[i] != b[j] 时,要使 a[i] == b[j] 可使用的操作步骤如下:
①、a[i] 可替换成 b[j]。
②、字符串 a 下标为 i 的位置插入字符 b[j],a[i+1] = 原a[i]…。
③、字符串 b 下标为 j 的位置插入字符 a[i],b[j+1] = 原b[j]…。
由于字符串可以通过“插入”字符的操作进行改变,要得到相同的两个字符串就要从串头到串尾进行匹配。利用这一特点我们可以利用动态规划的思路来解决。
①、创建 dp 二维数组,在 a、b 字符串头插入两个特殊字符,便于进行 dp 数组初始化。
②、当 a[i] == b[j] 时,不用操作,dp[i][j] = dp[i-1][j-1]
③、当 a[i] != b[j] 时, 需要操作,dp[i][j] = min{dp[i-1][j], dp[i][j-1], dp[i-1][j-1]} + 1
代码
#include<iostream>
#include<string>
using namespace std;
int main() {
string s1, s2;