链接:https://leetcode-cn.com/problems/uncrossed-lines/
可以看做最长公共子序列问题,动态规划解决。
d
p
[
i
]
[
j
]
dp[i][j]
dp[i][j]表示
A
[
0
,
.
.
.
,
i
]
A[0,...,i]
A[0,...,i]和
B
[
0
,
.
.
.
,
j
]
B[0,...,j]
B[0,...,j]子问题的答案。
C++代码:
class Solution {
public:
int maxUncrossedLines(vector<int>& A, vector<int>& B) {
vector<vector<int>>dp(A.size(),(vector<int>(B.size(),0)));
dp[0][0] = (A[0]==B[0]);
for(int i = 0;i<A.size();i++)
{
for(int j = 0;j<B.size();j++)
{
if(i==0&j==0)
continue;
else if(i==0)
dp[i][j] = (A[0]==B[j])?1:dp[i][j-1];
else if(j==0)
dp[i][j] = (A[i]==B[0])?1:dp[i-1][j];
else
if(A[i]==B[j])
dp[i][j] = dp[i-1][j-1]+1;
else
dp[i][j] = max(dp[i-1][j],dp[i][j-1]);
}
}
return dp[A.size()-1][B.size()-1];
}
};