Medium
LABLongest Palindromic Subsequence
Return the length of the longest subsequence of s that is a palindrome.
EXAMPLES
Example 1
Input
{
"s": "bbbab"
}
Output
4FUNCTION SHAPE
s: string→intSOLUTION NOTE
Key insight: Longest Palindromic Subsequence = LCS of string with its reverse.
Reveal reference solution +
pythonREFERENCE
def longestPalindromeSubseq(self, s: str) -> int:
# LPS(s) = LCS(s, reverse(s))
t = s[::-1]
@cache
def dp(i, j):
if i < 0 or j < 0: return 0
if s[i] == t[j]:
return 1 + dp(i-1, j-1)
return max(dp(i-1, j), dp(i, j-1))
return dp(len(s)-1, len(s)-1)Time
O(n²)Space
O(n²)