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
python3
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)