思路:
当不相等的时候,那么当前的最长公共子序列就断了,为0
唯一来源就是相等的时候
d
p
[
i
]
[
j
]
=
{
d
p
[
i
−
1
]
[
j
−
1
]
+
1
dp[i]==dp[j]
0
dp[i] != dp[j]
dp[i][j]= \begin{cases} dp[i-1][j-1]+1& \text{dp[i]==dp[j]}\\ 0& \text{dp[i] != dp[j]} \end{cases}
dp[i][j]={dp[i−1][j−1]+10dp[i]==dp[j]dp[i] != dp[j]
例如 0 1 2 3, 1 2
编号 | 0 | 1 | 2 | 3 |
---|---|---|---|---|
1 | 0 | 1 | 0 | 0 |
2 | 0 | 0 | 2 | 0 |
int max(int a, int b) {
if (a > b) {
return a;
}
return b;
}
int findLength(int* nums1, int nums1Size, int* nums2, int nums2Size){
int dp[nums1Size][nums2Size] ;
int count = 0;
memset(dp, 0, sizeof(int) * nums1Size * nums2Size);
int i,j;
for (i = 0; i<nums1Size; i++) {
for (j = 0; j < nums2Size; j++) {
if (nums1[i] == nums2[j]) {
if (i == 0 || j==0) {
dp[i][j] = 1;
}
else {
dp[i][j] = dp[i-1][j-1] + 1;
}
}
count = max(count, dp[i][j]);
}
}
return count;
}