参考:https://blog.csdn.net/uestclr/article/details/50760563
问题描述
给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence)。比如字符串1:BDCABA;字符串2:ABCBDAB
则这两个字符串的最长公共子序列长度为4,最长公共子序列是:BCBA
我的实现
动态规划:
- dp[i+1][j+1]表示截止到字符串a的i,字符串b的j位置的最长公共子序列长度;
- dpStr[i+1][j+1]表示截止到a的i,b的j位置的最长公共子序列
- 多申请一行一列的空间是为了代码实现方便
- 若a.charAt(i) == b.charAt(j),则dp[i ][j] = dp[i-1][j-1] + 1
- 若a.charAt(i) != b.charAt(j),则dp[i][j] = max(dp[i][j-1],dp[i-1][j])
import org.apache.commons.lang3.RandomStringUtils;
import org.junit.Test;
import org.junit.experimental.theories.FromDataPoints;
/**
* Author: zxh
* Date: 2019/2/12 14:31
* Email:
* Desc:
*/
public class TestDynamicPlanLCSSelf {
private final static int aLength = 10;
private final static int bLength = 15;

这篇博客介绍了如何使用动态规划求解两个字符串的最长公共子序列(LCS问题)。通过实例展示了当字符串1为BDCABA,字符串2为ABCBDAB时,它们的LCS长度为4,LCS为BCBA。博主详细阐述了动态规划的实现思路和代码逻辑。
最低0.47元/天 解锁文章
1337

被折叠的 条评论
为什么被折叠?



