def minCut(s) -> int:
"""
给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文。返回符合要求的 最少分割次数
:param s:
:return:
"""
length = len(s)
dp = [length]*length
palindrome = [[False]*length for _ in range(length)]
for j in range(length):
for i in range(j+1):
if s[i] != s[j]:
continue
palindrome[i][j] = j-i <= 2 or palindrome[i+1][j-1]
for i in range(length):
if palindrome[0][i]:
dp[i] = 0
else:
for j in range(i+1):
if palindrome[j][i]:
dp[i] = min(dp[i],dp[j-1]+1)
return dp[length-1]
s = "sbsaaaab"
print(minCut(s))
切割字符串为回文
最新推荐文章于 2024-07-15 22:10:26 发布