给两个字符串集合含有重复字符,例如abaabc和bcbaabc,输出结果bac。求他们无重复的最长公共子序列。RFLCS问题!!!
2条回答 默认 最新
- CodeBytes 2023-02-20 19:56关注
该回答引用ChatGPT
这个问题可以转化为无重复字符的最长公共子序列问题。可以使用动态规划算法来解决。
定义一个二维数组dp,其中dp[i][j]表示s1的前i个字符和s2的前j个字符的最长公共子序列的长度。初始化dp[0][j]和dp[i][0]为0。状态转移方程如下:
如果s1[i-1]等于s2[j-1],则dp[i][j]=dp[i-1][j-1]+1
如果s1[i-1]不等于s2[j-1],则dp[i][j]=max(dp[i-1][j], dp[i][j-1])
最后返回dp[m][n]即为两个字符串集合的无重复的最长公共子序列的长度。以下是Java代码实现:
public static int longestCommonSubsequenceWithoutDuplicates(String[] s1, String[] s2) { int m = s1.length, n = s2.length; int[][] dp = new int[m+1][n+1]; for (int i = 0; i <= m; i++) { dp[i][0] = 0; } for (int j = 0; j <= n; j++) { dp[0][j] = 0; } for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { if (s1[i-1].equals(s2[j-1])) { dp[i][j] = dp[i-1][j-1] + 1; } else { dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]); } } } return dp[m][n]; }
解决 无用评论 打赏 举报
悬赏问题
- ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
- ¥15 C语言使用vscode编码错误
- ¥15 用KSV5转成本时,如何不生成那笔中间凭证
- ¥20 ensp怎么配置让PC1和PC2通讯上
- ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
- ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
- ¥15 请各位帮我看看是哪里出了问题
- ¥15 vs2019的js智能提示
- ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
- ¥15 uniapp的h5项目写一个抽奖动画