132. Palindrome Partitioning II (动态规划)
Hard
Given a string s, partition s such that every substring of the partition is a palindrome.
Return the minimum cuts needed for a palindrome partitioning of s.
Example:
Input: "aab"
Output: 1
Explanation: The palindrome partitioning ["aa","b"] could be produced using 1 cut.
思路:
状态转移方程:
dp[0] = -1
if j >= i and s[j:i]是回文
class Solution:
def minCut(self, s: str) -> int:
if s == s[::-1]:
return 0
rlt = float('inf')
p = [[False] * len(s) for i in range(len(s))]
dp = [float('inf')] * (len(s) + 1)
dp[0] = -1
for j in range(len(s)):
for i in range(j + 1):
if i == j:
p[i][j] = True
elif j - 1 == i:
p[i][j] = s[i] == s[j]
else:
p[i][j] = p[i + 1][j - 1] and s[i] == s[j]
if p[i][j]:
dp[j + 1] = min(dp[j + 1], dp[i] + 1)
return dp[len(s)]