718. 最长重复子数组

    技术2022-07-10  139

    718. 最长重复子数组

    给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。

    示例 1:

    输入: A: [1,2,3,2,1] B: [3,2,1,4,7] 输出: 3 解释: 长度最长的公共子数组是 [3, 2, 1]。

    说明:

    1 <= len(A), len(B) <= 10000 <= A[i], B[i] < 100

    这是最长公共子序列的弱化版吧。子数组是连续的,子序列可以不连续。

    简单的dp。dp[i][j]代表以A[i-1]与B[j-1]结尾的公共字串的长度。状态转换方程:当A[i-1]==B[j-1]时dp[i][j] = dp[i-1][j-1]+1因为要求为子数组,所以只能从两个串各减一的长度转移。完活,看代码:

    class Solution { public int findLength(int[] A, int[] B) { int lenA = A.length; int lenB = B.length; int ans = 0; int[][] dp = new int[lenA+1][lenB+1]; for(int i = 1 ; i <= lenA ; i++){ for(int j = 1 ; j <= lenB ; j++){ if(A[i-1]==B[j-1]){ dp[i][j] = dp[i-1][j-1]+1; if(dp[i][j]>ans) ans = dp[i][j]; } } } return ans; } }
    Processed: 0.011, SQL: 9