1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| class Solution { public int longestPalindromeSubseq(String s) { Integer[][] memo = new Integer[s.length()][s.length()]; return helper(s.toCharArray(), 0, s.length() - 1, memo); }
private int helper(char[] sArray, int left, int right, Integer[][] memo) { if (left > right) { return 0; } if (left == right) { return 1; } if (memo[left][right] != null) { return memo[left][right]; } if (sArray[left] == sArray[right]) { return memo[left][right] = helper(sArray, left + 1, right - 1, memo) + 2; } return memo[left][right] = Math.max(helper(sArray, left + 1, right, memo), helper(sArray, left, right - 1, memo)); } }
|