基础算法题 —— 计算字符串的编辑距离(动态规划)

在这里插入图片描述
在这里插入图片描述

题解

在题目所求的编辑距离是指字符串 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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值