最长公共子序列

82 阅读1分钟
// 最长公共子序列
// 动态规划

public static int longestCommonSubsequence(String text1,String text2) {

    int m=text1.length(),n=text2.length();

    int[][] dp=new int[m+1][n+1];

    // 0-i的公共子串

    // 0-j的公共子串

    for (int i = 1; i <=m; i++) {

        char c1=text1.charAt(i-1);

        for (int j = 1; j <=n; j++) {

            char c2=text2.charAt(j-1);

            if(c1==c2) {

                // c1=c2,前一项的也是相等的才行所以dp[i-1]=dp[j-1]即:

                dp[i][j]=dp[i-1][j-1]+1;

            }else {

                // c1!=c2,取最长的一个公共子串,可以是i-1,也可以是j-1

                dp[i][j]=Math.max(dp[i-1][j],dp[i][j-1]);

            }

        }

    }

    return dp[m][n];

}