# PHP Program for Longest Palindromic Subsequence | DP-12

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 subseuqnce 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 lentgh 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 lnegth of the "` `.  ` `      ``"LPS is "``, lps(``\$seq``); ` ` `  `// This code is contributed ` `// by shiv_bhakt. ` `?> `

Output:

```The lnegth of the LPS is 7
```

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

My Personal Notes arrow_drop_up
Article Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.