美文网首页动态规划
Java算法:求两个字符串的最长公共子序列问题

Java算法:求两个字符串的最长公共子序列问题

作者: bfe31c902d9b | 来源:发表于2018-09-28 10:16 被阅读42次

最长公共子序列问题: 给定两个字符串A、B,求A与B的最长公共子序列(子序列不要求是连续的) 

举例: 

字符串A: abcdef 

字符串B:cd12334 

输出:cd

解题思路

这个问题是动态规划的问题,可以用动态规划表来进行求解

dp[i][j]:定义为a串第i位置b串第j位置以前的两个序列的最大的LCS,那么显而易见,dp[0][0]=0,dp[n][m]就是我们要求的最大值

状态转移方程:

1.a[i]=b[j]   dp[i][j]=dp[i-1][j-1]+1  

2.a[i]!=b[j]   dp[i][j]=max(dp[i-1][j],dp[i][j-1])

ps:当 i , j 位置的字符串相同的时候,我们i ,j 位置的值就是以前的LCS位置(i-1,j-1)加1

        当I ,j的字符串不相同时候,LCS的长度不会增加,但是我们有两种选择,就是i,j-1位置和i,j-1位置的值,我们选取最大的LCS作     为当前的LCS即可

动态规划

核心代码

for(int i=1;i<=n;i++){

    for(int j=1;j<=m;j++){

        if(a[i]==b[j]) dp[i][j]=dp[i-1][j-1]+1;

        else dp[i][j]=Math.max(dp[i-1][j],dp[i][j-1]);

    }

}

代码

相关文章

  • Java算法:求两个字符串的最长公共子序列问题

    最长公共子序列问题: 给定两个字符串A、B,求A与B的最长公共子序列(子序列不要求是连续的)举例:字符串A: ab...

  • 每天一道算法题18

    【最长公共子序列,子串】给定两个字符串上str1 和 str2, 求两个字符的最长公共子序列和最长公共子串。 最长...

  • LeetCode 1143. 最长公共子序列

    1、题目 2、分析 求公共最长子序列问题,有个套路:2.1 涉及两个字符串/数组时(比如最长公共子序列),dp 数...

  • 2019-10-29

    求2个字符串的最长公共子序列和最长公共子字符串 一. 最长公共子序列 定义: 一个数列S,如果分别是两个或多个已知...

  • 序列比对(二十四)——最长公共子序列

    原创:hxj7 本文介绍如何求解两个字符串的最长公共子序列。 最长公共子序列问题 前文《序列比对(23)最长公共子...

  • lintcode 最长公共子序列

    给出两个字符串,找到最长公共子序列(LCS),返回LCS的长度。说明最长公共子序列的定义: 最长公共子序列问题是在...

  • 最长公共子序列问题解析

    问题解读 最长公共子序列问题,就是找出两个字符串中,存在的最长的子序列 什么是子序列呢?子序列不同于公共子串,子串...

  • 2018-08-09

    动态规划之最长公共子序列 问题描述 给定两个字符串,求解两个字符串的最长公共子序列。比如字符串1:BDCABA;字...

  • 最长公共子序列问题

    问题描述: 求两个字符序列的公共最长子序列。 最长公共子串 在回到子序列问题之前,先来了解一下子串的问题。例如,H...

  • 第三章 路径分析算法——最长公共子序列问题

    3.5 最长公共子序列问题 最长公共子序列是寻找两个字符串中共同的最长子序列。对于一个数列S,如果分别是多个或者多...

网友评论

    本文标题:Java算法:求两个字符串的最长公共子序列问题

    本文链接:https://www.haomeiwen.com/subject/tfbeoftx.html