Python Program for Longest Palindromic Subsequence | DP-12
Last Updated :
21 Feb, 2022
Given a sequence, find the length of the longest palindromic subsequence in it.
As another example, if the given sequence is “BBABCBCAB”, then the output should be 7 as “BABCBAB” is the longest palindromic subsequence in it. “BBBBB” and “BBCBB” are also palindromic subsequences of the given sequence, but not the longest ones.
1) Optimal Substructure:
Let X[0..n-1] be the input sequence of length n and L(0, n-1) be the length of the longest palindromic subsequence of X[0..n-1].
If last and first characters of X are same, then L(0, n-1) = L(1, n-2) + 2.
Else L(0, n-1) = MAX (L(1, n-1), L(0, n-2)).
Following is a general recursive solution with all cases handled.
Dynamic Programming Solution
Python3
def lps( str ):
n = len ( str )
L = [[ 0 for x in range (n)] for x in range (n)]
for i in range (n):
L[i][i] = 1
for cl in range ( 2 , n + 1 ):
for i in range (n - cl + 1 ):
j = i + cl - 1
if str [i] = = str [j] and cl = = 2 :
L[i][j] = 2
elif str [i] = = str [j]:
L[i][j] = L[i + 1 ][j - 1 ] + 2
else :
L[i][j] = max (L[i][j - 1 ], L[i + 1 ][j]);
return L[ 0 ][n - 1 ]
seq = "GEEKS FOR GEEKS"
n = len (seq)
print ( "The length of the LPS is " + str (lps(seq)))
|
Output:
The length of the LPS is 7
Time Complexity :- O(n2)
Please refer complete article on Longest Palindromic Subsequence | DP-12 for more details!
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...