leetcode 718. 最长重复子数组【动态规划】

    技术2022-07-11  127

    寻找公共子数组,类似于公共子串问题,可以定义一个二维的dp数组来记录两个数组之间的匹配情况,当 A[i] == B[j] 时,令 dp[i][j]=dp[i-1][j-1]+1 。根据该状态转移方程可以得到动态规划解法的代码如下:

    class Solution { public int findLength(int[] A, int[] B) { int n = A.length, m = B.length; int[][] dp = new int[n + 1][m + 1]; int ans = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if(A[i-1] == B[j-1]){ dp[i][j] = dp[i-1][j-1] + 1; ans = Math.max(ans, dp[i][j]); } } } return ans; } }
    Processed: 0.009, SQL: 10