Problem
Given a string s, find the longest palindromic subsequence’s length in s.
A subsequence is a sequence that can be derived from another sequence by deleting some or no elements without changing the order of the remaining elements.
Algorithm
Dynamic Programming (DP). Sort the data with a and b, define the state f(i) is the longest palindromic subsequence’s length, then
f
(
i
)
=
m
a
x
{
f
(
j
)
+
1
}
,
i
f
s
o
r
t
e
d
_
p
a
i
r
s
[
i
]
[
0
]
>
s
o
r
t
e
d
_
p
a
i
r
s
[
j
]
[
1
]
f(i) = max\{ f(j) + 1 \}, \quad if \quad sorted\_pairs[i][0] > sorted\_pairs[j][1]
f(i)=max{f(j)+1},ifsorted_pairs[i][0]>sorted_pairs[j][1]
Code
class Solution:
def findLongestChain(self, pairs: List[List[int]]) -> int:
plen = len(pairs)
dp = [1] * plen
sorted_pairs = sorted(pairs, key=lambda x: (x[0], x[1]))
for i in range(1, plen):
for j in range(i):
if sorted_pairs[i][0] > sorted_pairs[j][1] and dp[i] <= dp[j]:
dp[i] = dp[j] + 1
return max(dp)