NahSama
Senior Member
Java:
class Solution {
public int longestPalindromeSubseq(String s) {
int n = s.length();
int[][] cache = new int[n][n];
return helper(s, 0, n - 1, cache);
}
public int helper(String s, int start, int end, int[][] cache) {
if (cache[start][end] != 0) return cache[start][end];
if (start > end) return 0;
if (start == end) return 1;
if (s.charAt(start) == s.charAt(end)) {
cache[start][end] = helper(s, start + 1, end - 1, cache) + 2;
} else {
cache[start][end] = Math.max(helper(s, start, end - 1, cache), helper(s, start + 1, end, cache));
}
return cache[start][end];
}
}