Problem Statement
Given a string S, Find the length of the longest palindromic subsequence.
Approach 1
Reverse S to T, then make use of the Longest Common Subsequence algorithm.
Approach 2
Dynamic programming.
def longest_palindromic_subsequence(s):
if not s:
return 0
n = len(s)
lps_len = 0
dp = [[0 for i in xrange(n)] for j in xrange(n)]
for i in xrange(n):
dp[i][i] = 1
for i in xrange(n - 1):
if s[i] == s[i + 1]:
dp[i][i + 1] = 2
lps_len = max(lps_len, dp[i][i + 1])
else:
dp[i][i + 1] = 1
for length in xrange(3, n + 1):
for start in xrange(n - length + 1):
end = start + length - 1
if s[start] == s[end]:
dp[start][end] = 2 + dp[start + 1][end - 1]
else:
dp[start][end] = max(dp[start + 1][end], dp[start][end - 1])
lps_len = max(lps_len, dp[start][end])
return lps_len
Analysis: O(n2) time complexity, O(n2) space complexity.