132. Palindrome Partitioning II
# Hard (很有意义很经典的一道动态规划的题,可以同时有两个动态规划来优化时间复杂度)
Solution:
class Solution:
def minCut(self, s: str) -> int:
p = [[False]*len(s) for i in range(len(s))]
minCut = [i for i in range(len(s))]
# self.isPalin(s, p)
for i in range(1, len(s)):
for j in range(0, i+1):
if s[i] == s[j] and (j+1 >= i-1 or p[j+1][i-1] == True):
p[j][i] = True
if j == 0:
minCut[i] = 0
break
else:
minCut[i] = min(minCut[i], minCut[j-1]+1)
return minCut[len(s)-1]
# 计算 string 中从 j 到 i 是否是回文,用p[j][i]表示
def isPalin(self, s, p):
for i in range(len(s)):
for j in range(i+1):
if i == j:
p[j][i] = True
else:
if s[j] == s[i]:
if j+1 >= i-1 or p[j+1][i-1] == True:
p[j][i] = True
Last updated