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 stc15f2k60s2单片机关于流水灯,时钟,定时器,矩阵键盘等方面的综合问题
  • ¥15 YOLOv8已有一个初步的检测模型,想利用这个模型对新的图片进行自动标注,生成labellmg可以识别的数据,再手动修改。如何操作?
  • ¥30 NIRfast软件使用指导
  • ¥20 matlab仿真问题,求功率谱密度
  • ¥15 求micropython modbus-RTU 从机的代码或库?
  • ¥15 django5安装失败
  • ¥15 Java与Hbase相关问题
  • ¥15 后缀 crn 游戏文件提取资源
  • ¥20 bash代码推送不上去 git fetch origin master #失败了
  • ¥15 LOL外服加入了反作弊系统,现在游戏录像rofl文件离线都无法打开