1class Solution:2def isPallindrom(self, s: str, l, r) -> bool:3st = s[l : r + 1]4rev = st[::-1]5return st == rev67def minCut(self, s: str) -> int:8N = len(s)9if not s:10return 011if self.isPallindrom(s, 0, N - 1):12return 013dp = [sys.maxsize] * (N + 1)14dp[-1] = 01516for i in range(N - 1, -1, -1):17for j in range(i, N):18if self.isPallindrom(s, i, j):19dp[i] = min(dp[i], 1 + dp[j + 1])2021return dp[0] - 1