Palindrome DP

Recursion Family

Signal

Palindromic substrings or longest palindromic subsequence

Template

Expand around each center, or fill a 2-D table.

Worked example (1)

#19

Palindrome DP (expand around center)

Expand-Around-Center

Return the longest palindromic substring of a given string.

function longestPalindrome(s: string): string {
  let start = 0, maxLen = 0;
  const expand = (l: number, r: number): void => {
    while (l >= 0 && r < s.length && s[l] === s[r]) { l--; r++; }
    const len = r - l - 1;
    if (len > maxLen) { maxLen = len; start = l + 1; }
  };
  for (let i = 0; i < s.length; i++) {
    expand(i, i);      // odd-length center
    expand(i, i + 1);  // even-length center
  }
  return s.substring(start, start + maxLen);
}
Insight

Two expansions per index (odd + even) covers all 2n−1 possible centers in O(n²).