class Solution:
def minCut(self, s: str) -> int:
maxLen = 0
n = len(s)
dp = [n] * n #最小分割次数
isPal = [[0 for i in range(n)] for i 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 < 3 or isPal[i+1][j-1]):
dp[i] = 0 if j==n-1 else min(dp[i], dp[j+1]+1)
isPal[i][j] = 1
return dp[0]
此外j从大到小也可以(待解释
class Solution:
def minCut(self, s: str) -> int:
maxLen = 0
n = len(s)
dp = [n] * n #最小分割次数
isPal = [[0 for i in range(n)] for i in range(n)] #是否回文串
for i in range(n-1, -1, -1):
for j in range(n-1, i-1, -1): #j从大到小
if s[i] == s[j] and (j - i < 3 or isPal[i+1][j-1]):
dp[i] = 0 if j==n-1 else min(dp[i], dp[j+1]+1)
isPal[i][j] = 1
return dp[0]