美文网首页
718. 最长公共子串

718. 最长公共子串

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

    题目:给定两个整数数组AB,返回两个数组中最长的公共子串的长度。
    思路:注意和最长公共子序列的思想区分,子串要求连续。定义dp[i][j]表示A[i:]B[j:]最长公共前缀(以A[i]/B[j]为起始点的子串)的长度,如果A[i]==B[j],则dp[i][j] = dp[i+1][j+1] + 1,否则dp[i][j] = 0,答案即为所有dp[i][j]中的最大值。

    int findLength(vector<int>& A, vector<int>& B){
        int m = A.size();
        int n = B.size();
        int dp[m+1][n+1]; //dp[i][j]表示字符串A[i:]和B[j:]的最长公共前缀的长度
        for(int i=0; i<=m; i++) dp[i][n] = 0;
        for(int j=0; j<=n; j++) dp[m][j] = 0;
        int max_res = 0;
    
        for(int i=m-1; i>=0; i--){
            for(int j=n-1; j>=0; j--){
                if(A[i]==B[j]){
                    dp[i][j] = dp[i+1][j+1]+1;
                }else{
                    dp[i][j] = 0;
                }
                if(dp[i][j]>max_res) max_res = dp[i][j];
            }
        }
        return max_res;
    }
    

    相关文章

      网友评论

          本文标题:718. 最长公共子串

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