Back to Dynamic Programming
Course Practice
Hard

Longest Palindromic Subsequence II

LAB

Return the longest even-length palindromic subsequence where no two adjacent palindrome characters are equal.

EXAMPLES

Example 1
Input
{
  "s": "bbabab"
}

Output
4

FUNCTION SHAPE

s: stringint
SOLUTION NOTE

Track previous matched character. Return 0 when i == j to ensure even length only (exclude single middle char).

Reveal reference solution +
pythonREFERENCE
def longestPalindromeSubseq(self, s: str) -> int:
    @cache
    def dp(i, j, prev):
        if i >= j: return 0
        if s[i] == s[j] and s[i] != prev:
            return 2 + dp(i + 1, j - 1, s[i])
        return max(dp(i + 1, j, prev), dp(i, j - 1, prev))

    return dp(0, len(s) - 1, '')
TimeO(n² × 26)
SpaceO(n² × 26)
Open on LeetCode
00:00
2 local tests readyRun with ⌘/Ctrl + Enter. Your code stays in this browser.

Runs solve(...) locally in a browser worker. SWE Playbook does not submit your code. Only run code you trust; Python code may access the network.