LeetCode 0516. Longest Palindromic Subsequence Solution in Java, C++, Python & More | Explanation + Code

CoderIndeed
0
0516. Longest Palindromic Subsequence

Description

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.

 

Example 1:

Input: s = "bbbab"
Output: 4
Explanation: One possible longest palindromic subsequence is "bbbb".

Example 2:

Input: s = "cbbd"
Output: 2
Explanation: One possible longest palindromic subsequence is "bb".

 

Constraints:

  • 1 <= s.length <= 1000
  • s consists only of lowercase English letters.

Solutions

Solution 1: Dynamic Programming

We define f[i][j] as the length of the longest palindromic subsequence from the i-th character to the j-th character in string s. Initially, f[i][i] = 1, and the values of other positions are all 0.

If s[i] = s[j], then f[i][j] = f[i + 1][j - 1] + 2; otherwise, f[i][j] = max(f[i + 1][j], f[i][j - 1]).

Since the value of f[i][j] is related to f[i + 1][j - 1], f[i + 1][j], and f[i][j - 1], we should enumerate i from large to small, and enumerate j from small to large.

The answer is f[0][n - 1].

The time complexity is O(n^2), and the space complexity is O(n^2). Where n is the length of the string s.

PythonJavaC++GoTypeScript
class Solution: def longestPalindromeSubseq(self, s: str) -> int: n = len(s) f = [[0] * n for _ in range(n)] for i in range(n): f[i][i] = 1 for i in range(n - 1, -1, -1): for j in range(i + 1, n): if s[i] == s[j]: f[i][j] = f[i + 1][j - 1] + 2 else: f[i][j] = max(f[i + 1][j], f[i][j - 1]) return f[0][-1](code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !