718. Maximum Length of Repeated Subarray

来源:互联网 发布:管碧玲 知乎 编辑:程序博客网 时间:2024/06/14 18:37

Given two integer arrays A and B, return the maximum length of an subarray that appears in both arrays.

Example 1:

Input:A: [1,2,3,2,1]B: [3,2,1,4,7]Output: 3Explanation: The repeated subarray with maximum length is [3, 2, 1].

Note:

  1. 1 <= len(A), len(B) <= 1000
  2. 0 <= A[i], B[i] < 100

分析

令f[i][j]表示以A[i]、B[j]结尾的两个相同子数组的最大长度。容易得出状态转移方程如下

f[i][j]=0 if i==0 | j==0

f[i][j]=0 if A[i]!=B[i]

f[i][j]=1+f[i-1][j-1] if A[i]==B[j]


代码

class Solution {public:    int findLength(vector<int>& A, vector<int>& B) {    int length=0;        int f[A.size()+1][B.size()+1];        for (int i = 0; i < A.size()+1; i++)        f[i][0]=0;        for (int j = 0; j < B.size()+1; j++)        f[0][j]=0;        for (int i = 1; i < A.size()+1; i++)        for (int j = 1; j < B.size()+1; j++) {        if (A[i-1]!=B[j-1]) {        f[i][j]=0;} else {f[i][j]=f[i-1][j-1]+1;if (f[i][j] > length)length=f[i][j];}}return length;    }}; 



原创粉丝点击