美文网首页
1143. 最长公共子序列

1143. 最长公共子序列

作者: 乘瓠散人 | 来源:发表于2021-04-11 09:17 被阅读0次

    题目:给定两个字符串text1和text2,返回这两个字符串的最长公共子序列。如果不存在公共子序列,返回0。
    思路:dp[i][j]表示text1的前i个字符和text2的前j个字符之间的最长公共子序列的长度。

    int longestCommonSubsequence(string text1, string text2){
        int m = text1.length();
        int n = text2.length();
        int dp[m+1][n+1];  //dp[i][j]表示text1前i个字符和text2前j个字符的最长公共子序列长度
        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++){
                dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
                if(text1[i-1]==text2[j-1]){  //text1的第i个字符和text2的第j个字符
                    dp[i][j] = max(dp[i][j], dp[i-1][j-1]+1);
                }else{
                    dp[i][j] = max(dp[i][j], dp[i-1][j-1]);
                }
            }
        }
        return dp[m][n];
    }
    

    相关文章

      网友评论

          本文标题:1143. 最长公共子序列

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