Given a string s, find the longest palindromic subsequence’s length in s.
A subsequence is a sequence that can be derived from another sequence by deleting some or no elements without changing the order of the remaining elements.
示例
示例 1:
输入:s = "bbbab"
输出:4
解释:一个可能的最长回文子序列为 "bbbb" 。
示例 2:
输入:s = "cbbd"
输出:2
解释:一个可能的最长回文子序列为 "bb" 。
解题
对于 dp[i][j] , 如果 s[i] == s[j] ,则 d[i][j] = dp[i+1][j-1] + 2,如果 s[i] != s[j] ,则 dp[i][j] = max(dp[i+1][j], dp[i][j-1]);


class Solution {
public int longestPalindromeSubseq(String s) {
int n = s.length();
int[][] dp = new int[n][n];
for(int i = 0; i < n; i++) dp[i][i] = 1; //对角线上的单个元素为1
for(int i = n-1; i >= 0; i--){
for(int j = i+1; j < n; j++){ //先得到后面短的字符串,最后才得到全局的结果
if(s.charAt(i) == s.charAt(j)){
dp[i][j] = dp[i+1][j-1] + 2; // i,j 是字符串中的位置,所以是 i+1, j-1
}else dp[i][j] = Math.max(dp[i+1][j], dp[i][j-1]);
}
}
return dp[0][n-1]; //全部的字符串结果
}
}
本篇文章来源于微信公众号:程序IT圈
原创文章,作者:栈长,如若转载,请注明出处:https://www.cxyquan.com/19140.html