Dynamic Programming21 sections · 916 units
Open in Course

LeetCode 132 Palindrome Partitioning II - Two DPs

Precompute + solve

First, precompute isPalin[i][j]isPalin[i][j] = true if s[i..j]s[i..j] is a palindrome. This is itself an interval DP: isPalin[i][j]isPalin[i][j] = (s[i]s[i] == s[j]s[j]) && isPalin[i+1][j1]isPalin[i+1][j-1].

Then, define cuts[i]cuts[i] = minimum cuts for s[0..i]s[0..i]. If s[0..i]s[0..i] is a palindrome, cuts[i]cuts[i] = 0. Otherwise, try all j where s[j+1..i]s[j+1..i] is a palindrome: cuts[i]cuts[i] = min(cuts[j]cuts[j] + 11). This is 1D (one-dimensional) DP using the 2D (two-dimensional) precomputation. Total time: O(n2)O(n^2).

Time complexity: O(n2)O(n^2).

Space complexity: O(n2)O(n^2) for the dp arrays.