← Recursion & DP

Micro-Drill #173 — Palindrome Partitioning DP precompute

Recursion & DP Target: 15s

Two-phase DP: first build O(n²) palindrome lookup, then find min cuts. Common two-table pattern.

def minCut(s):
    n = len(s)
    # precompute palindrome table
    is_pal = [[False]*n for _ in range(n)]
    for i in range(n-1, -1, -1):
        for j in range(i, n):
            if s[i] == s[j] and (j - i < 2 or is_pal[i+1][j-1]):
                is_pal[i][j] = True
    # dp[i] = min cuts for s[0..i]
    dp = list(range(n))  # worst case: cut before every char
    for i in range(1, n):
        if is_pal[0][i]:
            dp[i] = 0; continue
        for j in range(1, i+1):
            if is_pal[j][i]:
                dp[i] = min(dp[i], dp[j-1] + 1)
    return dp[n-1]

Type it from memory. Go.

Practice Problems

Related Coding Drills

← Micro #172 Micro #174 →