ForRise_Liu 2023-02-20 19:36 采纳率: 0%
浏览 20

无重复的最长公共子序列怎么求!!

给两个字符串集合含有重复字符,例如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];
    }
    
    
    评论

报告相同问题?

问题事件

  • 修改了问题 2月22日
  • 创建了问题 2月20日

悬赏问题

  • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上
  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
  • ¥15 请各位帮我看看是哪里出了问题
  • ¥15 vs2019的js智能提示
  • ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
  • ¥15 uniapp的h5项目写一个抽奖动画