算法练习之DP 求LCM (最长公共子序列)

算法练习之DP 求LCM (最长公共子序列)

大家好,又见面了,我是全栈君。

1. 对于序列x[1,i]和y[1,j],推导递推公式
1.a 假设当前元素同样,那么就将当前最大同样数+1
2.b 假设当前元素不同。那么就把当前最大同样数“传递”下去

因此递推公式为:

x[i] == y[j] : dp[i][j] = Max(dp[i-1][j-1],dp[i][j-1],dp[i-1][j]) + 1
x[i] != y[j] : dp[i][j] = Max(dp[i][j-1],dp[i-1][j])

因为x[i]!=y[j]的情况不难能够对x[i]==y[j]时的情况化简得:

x[i] == y[j] : dp[i][j] = dp[i-1][j-1] + 1

2. 依据公式填充dp数组


比如,对于ABCDBC 和 BADC这两个字符串,在最长公共子串时 :


2.a 第一列置0,即将dp[0][j]和dp[i][0] = 0

2.b 运用公式填表,例如以下所看到的


 	A B C D B C
	0 0 0 0 0 0
B 0	0 1 1 1 2 2
A 0	1 1 1 1 2 2 
D 0	1 1 1 2 2 2
C 0	1 1 2 2 2 3

3. C# 代码演示样例:

void Main()
{
	var r = DP_LCS("ABCDBC","BADC");
	Console.WriteLine(r);
}


static int DP_LCS(string x, string y){


int[,] dpArr = new int[x.Length+1,y.Length+1];


for(var i = 0 ;i <= x.Length; i++){
for(var j = 0 ;j <= y.Length; j++){
if(i == 0 || j == 0){
dpArr[i,j] = 0;
}


else if (x[i - 1] == y[j - 1]){
dpArr[i,j] = dpArr[i-1,j-1] + 1;
}
else {
dpArr[i,j] = Math.Max(dpArr[i-1,j],dpArr[i,j-1]);
}




}
}


return dpArr[x.Length, y.Length];


}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116160.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • IntelliJ IDEA中创建java项目

    IntelliJ IDEA中创建java项目IntelliJIDEA支持java、Android、Maven、Gradle、Kotlin等类型的项目,同时AndroidStudio就是在其基础上二次开发出来的,功能非常强大。本文以IntelliJIDEA2018.2.5版本为例介绍如何创建java项目。1.依次选择菜单:File->New->Project…,打开NewProject界面。2.在左侧的项目类型里选择:Java,点击Next按钮。3.在出现的界面中选中“Createprojectfromtempl

    2022年7月8日
    41
  • task scheduler启动不了_Task Scheduler

    task scheduler启动不了_Task Scheduler理解ITaskService对象此对象需要依赖TaskshdWindows服务,如果此服务被关闭,那么此COM对象也将会失效。

    2022年10月9日
    4
  • 精进Spring—Spring常用注解【经典总结】

    Spring的一个核心功能是IOC,就是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式。 Spring注解方式减少了配置文件内容,更加便于管理,并且使用注解可以大大提高了开发效率!

    2022年2月26日
    50
  • 小米10获取root权限_oppo A59s (全网通)一键ROOT获取ROOT权限

    小米10获取root权限_oppo A59s (全网通)一键ROOT获取ROOT权限很多小白机友问oppoA59s(全网通)如何获取ROOOT权限?oppoA59s(全网通)用什么ROOT工具比较靠谱?奇兔刷机小编给大家分享一篇oppoA59s(全网通)一键ROOT教程,简单几步,轻松搞定!具体步骤如下:  1.首先打开奇兔刷机软件,插好数据线,连接您的oppoA59s(全网通)手机,然后打开手机USB调试。  2.oppoA59s(全网…

    2025年5月28日
    4
  • google code 上源码的下载方法

    google code 上源码的下载方法

    2021年11月14日
    68
  • navicat 15 激活码_在线激活

    (navicat 15 激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月22日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号