Leetcode 583 题 两个字符串的删除操作

题目来源:https://leetcode-cn.com/problems/delete-operation-for-two-strings/


题目描述

给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。

示例:
输入: “sea”, “eat”
输出: 2
解释: 第一步将"sea"变为"ea",第二步将"eat"变为"ea"


思路分析

这道题给我们两个字符串,要求删除最少次数,使得最后剩下的两个字符串相同。也就是说,这道题要求我们尽可能多的保留相同的字符串,才能使删除的次数最少。这道题就是我们上一次所求的 “最长公共子序列” 的变种,详细可以点击这里:最长公共子序列,获得最长公共子序列长度后,只要把 word1 的长度减最长最长公共子序列长度及 word2 的长度减去最长公共子序列长度的结果求和,就能得到最少删除次数。


代码描述

使用 Java 进行代码描述:

class Solution {
    public int minDistance(String word1, String word2) {
        int len1 = word1.length();
        int len2 = word2.length();

        int dp[][] = new int[len1 + 1][len2 + 1];

        for (int i = 0; i < len1; i++) {
            for (int j = 0; j < len2; j++) {
                if (word1.charAt(i) == word2.charAt(j)) {
                    dp[i + 1][j + 1] = dp[i][j] + 1;
                } else {
                    dp[i + 1][j + 1] = Math.max(dp[i][j + 1], dp[i + 1][j]);
                }
            }
        }

        int deleteNum = dp[len1][len2];
        return len1 + len2 - 2 * deleteNum ;
    }
}

欢迎关注

技术公众号:小猿君的算法笔记

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值