Given a string s, find the longest palindromic subsequence's length in s. You may assume that the maximum length of s is 1000.
Example 1:
Input:
"bbbab"
Output:
4
One possible longest palindromic subsequence is "bbbb".
Example 2:
Input:
"cbbd"
Output:
2
One possible longest palindromic subsequence is "bb".
Constraints:
1 <= s.length <= 1000
s consists only of lowercase English letters.
classSolution {publicintlongestPalindromeSubseq(String s) {// dp[i][j] -> length of longest palindromic subsequence between index i and jint dp[][] =newint[s.length()][s.length()];// now the base case will be that when i=j then longest sequence will be that// character itself// Therefore ans=1for (int i =0; i <s.length(); i++) dp[i][i] =1;// Remember pointer j will always be ahead of pointer i// Look at dp[i][j] calls like putting 2 pointers at string// Now to use our base cases we need this flow of loopfor (int i =s.length() -1; i >=0; i--) {for (int j = i +1; j <s.length(); j++) {if (s.charAt(i) ==s.charAt(j)) { dp[i][j] = dp[i +1][j -1] +2; } else { dp[i][j] =Math.max(dp[i +1][j], dp[i][j -1]); } } }return dp[0][s.length() -1]; }}