题目链接
https://leetcode.com/problems/palindrome-partitioning-ii/
题目原文
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.
For example, given s = "aab"
,
Return 1
since the palindrome partitioning ["aa","b"]
could be produced using 1 cut.
题目大意
承接上一题的题意,求可以满足回文子串切割的最少割数
解题思路
使用动态规划进行求解:用数组dp[i]记录从第0位到i位最小割数,使用i-1对第i个位置进行初始化,如果子串s[j:i]是回文串,则dp[i] = min(dp[i],dp[j]+1)
代码
class Solution(object):
def minCut(self, s):
"""
:type s: str
:rtype: int
"""
n = len(s)
dp = [(i - 1) for i in range(n + 1)]
for i in range(1, n + 1):
for j in range(i):
tmp = s[j:i]
if tmp == tmp[::-1]:
dp[i] = min(dp[i], dp[j] + 1)
return dp[n]