美文网首页
最大公共子序列

最大公共子序列

作者: 万浩2020 | 来源:发表于2018-05-15 16:39 被阅读0次

典型的动态规划问题

首先找到递推式

image

有了递推式,然后进行初始化

image

数组的最后一个元素的值就为最大公共子序列的长度,具体代码如下

public static void main(String[] args) {
    // TODO Auto-generated method stub
    
    String s1 = "asd";
    String s2 = "sd";
    
    showStr(getLong(s1,s2),s1, s2,s1.length(),s2.length());
    
}


public static int[][] getLong(String s1,String s2) {
    char[] str1 = s1.toCharArray();
    char[] str2 = s2.toCharArray();
    
    int[][] dp = new int[s1.length()+1][s2.length()+1];
    //初始化DP数组
    for(int x=0;x<dp.length;x++) {
        dp[x][0] = 0;
    }
    for(int x=0;x<dp[0].length;x++) {
        dp[0][x] = 0;
    }
    
    for(int x=1;x<dp.length;x++) {
        
        for(int y=1;y<dp[0].length;y++) {
            
            if(str1[x-1]==str2[y-1]) {
                dp[x][y] = dp[x-1][y-1]+1;
            }else {
                dp[x][y] = Math.max(dp[x][y-1], dp[x-1][y]);
            }
            
        }
        
    }
    
    
    
    return dp;
}

public static void showStr(int dp[][],String s1,String s2,int i,int j) {
    if (i == 0 || j == 0) {  
        return;  
    }  
    
    if (s1.charAt(i - 1) == s2.charAt(j - 1)) {  
        showStr(dp, s1, s2, i - 1, j - 1);  
        System.out.print(s1.charAt(i - 1));  
    } else if (dp[i - 1][j] >= dp[i][j]) {  
        showStr(dp, s1, s2, i - 1, j);  
    } else {  
        showStr(dp, s1, s2, i, j - 1);  
    } 
}

相关文章

  • 算法问题清单

    最大子序列和最长公共子序列最长公共子串大整数相乘/除/加数组最大乘积

  • 算法(04)动态规划

    零钱问题 背包问题 最长公共子序列 最长公共子串 最长上升子序列 最大连续子序列和

  • 最大公共子序列(LCS)

    子序列 子序列不要求字符连续(这与串不同) 公共子序列 两个字符串中的相同的子序列 最大公共子序列的例子字符串 X...

  • 最长公共子序列问题总结

    公共子序列与公共子串不同在于子序列不要求连续。利用两个二维数组进行求解,c数组负责存值,求得子序列最大长度,即途中...

  • 最大公共子序列

    典型的动态规划问题 首先找到递推式 有了递推式,然后进行初始化 数组的最后一个元素的值就为最大公共子序列的长度,具...

  • 公共子序列问题

    最长公共子序列 最长上升子序列 最长公共上升子序列

  • JS求最长公共子序列、最大公共子串、最大子段和

    一、最长公共子序列 二、最大公共子串 三、最大子段和 参考链接:查找两个字符串的最长公共子串的Javascript...

  • 2019-10-11

    今天学习了最长公共子序列和最大子段和问题。

  • 最长公共子序列和最长公共子串

    最长公共子序列和最长公共子串区别 最长公共子串(Longest CommonSubstring)和最长公共子序列(...

  • 动态规划常见面试题

    子序列类型编辑距离 最长递增子序列 最大子数组 最长公共子序列 背包问题0-1背包问题 子集背包问题 完全背包问题...

网友评论

      本文标题:最大公共子序列

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