题目:
给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文。返回符合要求的 最少分割次数 。
思路:
动态规划
解答:
class Solution:
def minCut(self, s: str) -> int:
N = len(s)
#dp[i] 是以i结尾的分割成回文串的最少次数
dp = [N] * N
for i in range(N):
if self.isPalindrome(s[0:i+1]):
dp[i]=0
continue
for j in range(i):
if self.isPalindrome(s[j + 1 : i + 1]):
dp[i]=min(dp[i], dp[j] + 1)
return dp[N-1]
def isPalindrome(self, s):
return s == s[::-1]