【算法练习Day47】两个字符串的删除操作&&编辑距离

在这里插入图片描述

​📝个人主页:@Sherry的成长之路
🏠学习社区:Sherry的成长之路(个人社区)
📖专栏链接:练题
🎯长路漫漫浩浩,万事皆有期待

两个字符串的删除操作

583. 两个字符串的删除操作 - 力扣(LeetCode)

这道题也是对于编辑距离的铺垫题目,是可以操作两个字符串的删除,使得两个字符串的字符完全相同,这道题可以用递推公式模拟删除,也可以使用求两个字符串的最大公共子序列的解题方法,求出最长的公共非连续子序列,然后再用两个字符串本身的长度减去这个公共子序列长度,也可以求出至少要删除几步。这里只分析第一种解题方法。

dp数组的含义:dp【i】【j】表示以i-1为下标的字符串1和以j-1为结尾的字符串2,要想使它们相等,所要删除的最小步数是多少。

递推公式:由于dp数值含义,当字符串1的i-1为结尾的下标元素,与字符串2以j-1为结尾的下标元素相等时,dp【i】【j】=dp【i-1】【j-1】。含义是当前元素相等,那么到达当前的位置需要删除的步数就和上一个位置的所需步数相等,因为此时元素相等,没有删除元素。

第二种情况就是两个对应元素不相等,这时又分为两种不同情况,即两元素不等的时候,删除第一个字符串的元素,或者是删除第二个字符串的元素,比较一下当前是哪一种删除的步数可以得到最小值。第一种就是删除字符串1的那个字符,那就是dp【i-1】【j】+1,dp数组的定义是i-1和j-1的下标的,所以此时j就代表前一个字符不变,然后略过字符串1这个字符,去向前找上一次的删除步数是多少,第二种情况是删除字符串2自然就是,dp【i】【j-1】+1,最后取最小值。

dp数组初始化:初始化一般是看递推公式决定的,当字符串1为空时候,字符串2需要删除当前字符个数的步数才能达到空字符串也就是需要删除j个。当字符串2为空也是同样的道理,字符串1需要删除i个。根据这一性质我们可以初始化第一行和第一列,也就是两个分别是空字符串情况,其他的部分统一初始化为0因为递推公式会全部覆盖。

遍历顺序:根据递推公式可知,从上到下,从左到右。

class Solution {
   
public:
    int minDistance(string word1, string word2) {
   
        vector<vector<int>>dp(word1.size()+1,vector<int>(word2.size()+1,0));
        dp[0][0]=0;
        for
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sherry的成长之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值