1035. Uncrossed Lines
Contents
Problem
We write the integers of A
and B
(in the order they are given) on two separate horizontal lines.
Now, we may draw connecting lines: a straight line connecting two numbers A[i]
and B[j]
such that:
A[i] == B[j]
;
The line we draw does not intersect any other connecting (non-horizontal) line.
Note that a connecting lines cannot intersect even at the endpoints: each number can only belong to one connecting line.
Return the maximum number of connecting lines we can draw in this way.
example 1
|
|
example 2
|
|
example 3
|
|
Constraints
- 1 <=
len(A)
<= 500 - 1 <=
len(B)
<= 500 - 1 <=
A[i], B[i]
<= 2000
Solution
Dynamic programming
Lets describe our dp function.
i
– iterator over A
j
– iterator over B
- If
i<0
orj<0
– return 0 - Compare
A[i]
andB[j]
:- if equal – run dp with
i-1
,j-1
; return with + 1 - if not equeal – return max of dp(
i-1
,j
) and dp(i
,j-1
)
- if equal – run dp with
|
|