给定一个字符串s,找到其中最长的回文子序列。可以假设s的最大长度为1000。
示例 1:
输入:
"bbbab"
输出:
4
一个可能的最长回文子序列为 "bbbb"。
示例 2:
输入:
"cbbd"
输出:
2
一个可能的最长回文子序列为 "bb"。
思路:一道经典动态规划题,定义dp[i][j]:表示字符串s从前往后到第i个字符匹配到字符串s从后往前第j个字符的回文序列最大值。
class Solution {
public int longestPalindromeSubseq(String s) {
int n=s.length();
int[][] dp=new int[n+1][n+1];
StringBuilder str=new StringBuilder();
for(int i=n-1;i>=0;i--) str.append(s.charAt(i));
String s1=str.toString();
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) {
if(s.charAt(i-1)==s1.charAt(j-1))
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=Math.max(dp[i][j-1], dp[i-1][j]);
}
return dp[n][n];
}
}