LeetCode 583. 两个字符串的删除操作 java题解

news/2024/12/23 16:23:48 标签: leetcode, java, 算法, 动态规划

https://leetcode.cn/problems/delete-operation-for-two-strings/
用最长公共子序列的做法。先求出他两的最长公共子序列,这部分是要保留的。字符串中除了这部分的字符,其他字符都需要删除。

java">class Solution {
    public int minDistance(String word1, String word2) {
        int len1=word1.length(),len2=word2.length();
        int[][] dp=new int[len1+1][len2+1];
        //求最长公共子序列的长度
        //dp[i][j]: i个,j个.初始化为0
        for(int i=1;i<=len1;i++){
            for(int j=1;j<=len2;j++){
                char c1=word1.charAt(i-1);
                char c2=word2.charAt(j-1);
                if(c1==c2){
                    dp[i][j]=dp[i-1][j-1]+1;
                }
                else{
                    dp[i][j]=Math.max(dp[i-1][j],dp[i][j-1]);
                }
            }
        }
        return len1+len2-2*dp[len1][len2];
    }
}

你知道的,我只会做最长公共子序列。所以想到了这种歹毒的方法。

下面是别人题解的方法。
dp数组中存储需要删除的字符个数。如果当前字符相同,不用删了,删除个数用上一个状态的。如果当前字符不同,要考虑3种情况:删第一个字符串的,删第二个字符串的,两个都删。

java">// dp数组中存储需要删除的字符个数
class Solution {
    public int minDistance(String word1, String word2) {
        int[][] dp = new int[word1.length() + 1][word2.length() + 1];
        for (int i = 0; i < word1.length() + 1; i++) dp[i][0] = i;
        for (int j = 0; j < word2.length() + 1; j++) dp[0][j] = j;
        
        for (int i = 1; i < word1.length() + 1; i++) {
            for (int j = 1; j < word2.length() + 1; j++) {
                if (word1.charAt(i - 1) == word2.charAt(j - 1)) {
                    dp[i][j] = dp[i - 1][j - 1];
                }else{
                    dp[i][j] = Math.min(dp[i - 1][j - 1] + 2,
                                        Math.min(dp[i - 1][j] + 1, dp[i][j - 1] + 1));
                }
            }
        }
        
        return dp[word1.length()][word2.length()];
    }
}

添加链接描述


http://www.niftyadmin.cn/n/5796749.html

相关文章

linux----文件访问(c语言)

linux文件访问相关函数 打开文件函数 - open 函数原型&#xff1a;int open(const char *pathname, int flags, mode_t mode);参数说明&#xff1a; pathname&#xff1a;这是要打开的文件的路径名&#xff0c;可以是绝对路径或者相对路径。例如&#xff0c;"/home/user/…

机器学习(二)-简单线性回归

文章目录 1. 简单线性回归理论2. python通过简单线性回归预测房价2.1 预测数据2.2导入标准库2.3 导入数据2.4 划分数据集2.5 导入线性回归模块2.6 对测试集进行预测2.7 计算均方误差 J2.8 计算参数 w0、w12.9 可视化训练集拟合结果2.10 可视化测试集拟合结果2.11 保存模型2.12 …

tslib(触摸屏输入设备的轻量级库)的学习、编译及测试记录

目录 tslib的简介tslib的源码和make及make install后得到的文件下载tslib的主要功能tslib的工作原理tslib的核心组成部分tslib的框架和核心函数分析tslib的框架tslib的核心函数ts_setup()的分析(对如何获取设备名和数据处理流程的分析)函数ts_setup()自身的主要代码ts_setup()对…

材料性质预测、分子生成、分类等研究方向的大语言模型构建与应用

流程 数据准备 收集和预处理大规模材料相关数据集。格式化数据以适应模型输入。 模型预训练 基于Transformer架构进行大规模无监督预训练。任务&#xff1a;掩码语言模型&#xff08;MLM&#xff09;或自回归生成任务。 任务微调 针对特定任务&#xff08;性质预测、分子生成、…

Docker Compose 安装 Harbor

我使用的系统是rocky Linux 9 1. 准备环境 确保你的系统已经安装了以下工具&#xff1a; DockerDocker ComposeOpenSSL&#xff08;用于生成证书&#xff09;#如果不需要通过https连接的可以不设置 1.1 安装 Docker 如果尚未安装 Docker&#xff0c;可以参考以下命令安装&…

15款行业大数据报告下载网站

1、CAICT中国信通院 http://www.caict.ac.cn/ 国家高端产业智库&#xff0c;研究报告免费下载PDF版本。 2、阿里研究院 http://www.aliresearch.com/ 阿里出品&#xff0c;阿里相关产品数据报告。 3、企鹅智库 https://re.qq.com/ 腾讯旗下数据报告。 4、CBNData https:…

数据结构经典算法总复习(下卷)

第五章:树和二叉树 先序遍历二叉树的非递归算法。 void PreOrderTraverse(BiTree T, void (*Visit)(TElemType)) {//表示用于查找的函数的指针Stack S; BiTree p T;InitStack(S);//S模拟工作栈while (p || !StackEmpty(S)) {//S为空且下一个结点为空&#xff0c;意味着结束遍…

centos集群部署seata

文章目录 场景环境介绍100.64.0.3节点部署seata100.64.0.4节点部署seatanacos注册的效果我的配置,可以参考下 场景 生产环境都是以集群的方式部署seata, 这里演示下部署方式 环境介绍 2台centos7.9的开发机(内网ip100.64.0.4 ,100.64.0.3)jdk17一个nacos服务一个8.0.40版本的m…