Maximum Length of Repeated Subarray
题目描述
解题思路
题目属于动态规划一栏,自然会下意识通过动态规划方面的思想去想对策,动态规划算法的核心便是状态与状态转移方程,即当前的状态需要依靠前一个状态的值。而在本题中我完全可以用C[i][j] 来表示各自数组分别以A[i] 和 B[j] 结尾的最长公共子串的长度,如果A[i]==B[j],C[i][j]=C[i−1][j−1]+1。
C++代码实现
class Solution {
public:
int findLength(vector<int>& A, vector<int>& B) {
vector<vector<int> > C(A.size() + 1, vector<int>(B.size() + 1, 0));
int max = 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]) {
C[i][j] = C[i - 1][j - 1] + 1;
}
max = max > C[i][j] ? max : C[i][j];
}
}
return max;
}
};