题目
代码
class Solution {
// 子序列不需要连续,不同于子串
public int longestPalindromeSubseq(String s) {
int n = s.length();
int[][] f = new int[n][n];
for (int i = n - 1;i >= 0; i--) {
f[i][i] = 1;
for (int j = i + 1; j < n; j++) {
// 当 s[i] == s[j] 时,考虑 i 和 j 中间序列的奇偶个数
if (s.charAt(i) == s.charAt(j)) {
f[i][j] = f[i + 1][j - 1] + 2;
} else {
f[i][j] = Math.max(f[i + 1][j], f[i][j - 1]);
}
}
}
return f[0][n - 1];
}
}