Longest Palindromic Subsequence

An interactive, step-by-step visualisation of Longest Palindromic Subsequence.

Category
Dynamic Programming
Time complexity
O(n²)
Space complexity
O(n²)

Pseudocode

dp[i][i] = 1
if s[i]==s[j]: dp[i][j] = dp[i+1][j-1] + 2
else: dp[i][j] = max(dp[i+1][j], dp[i][j-1])

Reference implementation

def lps(s):
    n = len(s)
    dp = [[0]*n for _ in range(n)]
    for i in range(n): dp[i][i] = 1
    for length in range(2, n+1):
        for i in range(n - length + 1):
            j = i + length - 1
            if s[i] == s[j]:
                dp[i][j] = (2 if length == 2 else dp[i+1][j-1] + 2)
            else:
                dp[i][j] = max(dp[i+1][j], dp[i][j-1])
    return dp[0][n-1]

Open the interactive Longest Palindromic Subsequence visualisation →