/*
最长子序列 并不是子字符串 所以可以是不连续的,
思路:动态规划 假设i, j是两个坐标,建立一个动态规划数组 dp[i][j] 表示i---j之间的最长回文子序列长度 如果想知道i---j之间的最长回文子序列,首先要判断i,j位置是否相等,1,相等:则 i+1, j-1 位置数字 + 2; 2 不等:是在i---j-1位置与 i+1---j位置 找一个最大值;
*/
class Solution {
public int longestPalindromeSubseq(String s) {
if(s == null || s.length() == 0) return 0;
int[][] dp = new int[s.length()][s.length()];
for(int i = s.length() - 1; i >= 0; i--) {
dp[i][i] = 1;
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][j - 1], dp[i + 1][j]);
}
}
}
return dp[0][s.length() - 1];
}
}
Longest Palindromic Subsequence leetcode java走地牙
最新推荐文章于 2021-08-12 19:26:14 发布