# PHP Program for Longest Palindromic Subsequence | DP-12

• Last Updated : 13 Aug, 2021

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

## PHP

 ` \$y)? \$x : \$y; }` `// Returns the length of the``// longest palindromic``// subsequence in seq``function` `lps(``\$str``)``{``\$n` `= ``strlen``(``\$str``);``\$i``; ``\$j``; ``\$cl``;` `// Create a table to store``// results of subproblems``\$L``[][] = ``array``(``array``());`  `// Strings of length 1 are``// palindrome of length 1``for` `(``\$i` `= 0; ``\$i` `< ``\$n``; ``\$i``++)``    ``\$L``[``\$i``][``\$i``] = 1;` `    ``// Build the table. Note that``    ``// the lower diagonal values``    ``// of table are useless and``    ``// not filled in the process.``    ``// The values are filled in a``    ``// manner similar to Matrix``    ``// Chain Multiplication DP``    ``// solution (See``    ``// https://www.geeksforgeeks.org/matrix-chain-multiplication-dp-8/).``    ``// cl is length of substring``    ``for` `(``\$cl` `= 2; ``\$cl` `<= ``\$n``; ``\$cl``++)``    ``{``        ``for` `(``\$i` `= 0; ``\$i` `< ``\$n` `- ``\$cl` `+ 1; ``\$i``++)``        ``{``            ``\$j` `= ``\$i` `+ ``\$cl` `- 1;``            ``if` `(``\$str``[``\$i``] == ``\$str``[``\$j``] &&``                            ``\$cl` `== 2)``            ``\$L``[``\$i``][``\$j``] = 2;``            ``else` `if` `(``\$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];``}` `// Driver Code``\$seq` `= ``'GEEKS FOR GEEKS'``;``\$n` `= ``strlen``(``\$seq``);``echo` `"The length of the "` `.``      ``"LPS is "``, lps(``\$seq``);` `// This code is contributed``// by shiv_bhakt.``?>`
Output
`The length of the LPS is 7`

Please refer complete article on Longest Palindromic Subsequence | DP-12 for more details!

My Personal Notes arrow_drop_up