第11天--算法(最长公共子序列)

最长公共子序列

class Solution {

    public int longestCommonSubsequence(String text1, String text2) {

        char s1[] = text1.toCharArray();

        char s2[] = text2.toCharArray();

        int M = s1.length;

        int N = s2.length;

        int dp[][] = new int[M][N];

        dp[0][0] = s1[0] == s2[0] ? 1 : 0;

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

            dp[0][j] = s1[0] == s2[j] ? 1 : dp[0][j - 1];

        }

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

            dp[i][0] = s2[0] == s1[i] ? 1 : dp[i - 1][0];

        }

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

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

                int p1 = dp[i - 1][j];

                int p2 = dp[i][j - 1];

                int p3 = s1[i] == s2[j] ? dp[i - 1][j - 1] + 1 : 0;

                dp[i][j] =  Math.max(p1,Math.max(p2,p3));

            }

        }

        return dp[M - 1][N - 1];

    }

}

posted @ 2021-11-17 15:05  现在开始努力  阅读(26)  评论(0)    收藏  举报