1. 程式人生 > >leetcode 718. Maximum Length of Repeated Subarray 最長公共子串 + 動態規劃DP

leetcode 718. Maximum Length of Repeated Subarray 最長公共子串 + 動態規劃DP

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: 3
Explanation:
The repeated subarray with maximum length is [3, 2, 1].
Note:
1 <= len(A), len(B) <= 1000
0 <= A[i], B[i] < 100

本題就是尋找最長的公共子串

程式碼如下:

#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <string>
#include <climits>
#include <algorithm>
#include <sstream>
#include <functional>
#include <bitset>
#include <numeric> #include <cmath> #include <regex> using namespace std; class Solution { public: int findLength(vector<int>& a, vector<int>& b) { int m = a.size(), n = b.size(); vector<vector<int>> dp(m+1,vector<int
>
(n+1,0)); int res = 0; for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { if (a[i - 1] == b[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1; else dp[i][j] = 0; res = max(res, dp[i][j]); } } return res; } };