Palindrome Partitioning II 题解
题目来源: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.解题思路:
>
Calculate and maintain 2 DP states:
pal[i][j] , which is whether s[i..j] forms a pal
d[i], which is the minCut for s[i..n-1]
Once we comes to a pal[i][j]==true:
if j==n-1, the string s[i..n-1] is a Pal, minCut is 0, d[i]=0;
else: the current cut num (first cut s[i..j] and then cut the rest s[j+1...n-1]) is 1+d[j+1],
compare it to the exisiting minCut num d[i], repalce if smaller.
d[0] is the answer.第一步还是跟Palindrome Partitioning一样,用DP,任意i-j组合先计算好是否是回文;
第二步仍用DP,dp[i]表示s[i, len-1]最少的minCut, 对每一个palindrome[i][j]为true的:
if j == len-1, 则 dp[i]=0;
else s要拆分为s[i, j], [j+1, len-1],当前cut数=1+dp[j+1], 所以dp[i] = std::min(dp[i], 1+dp[j+1])
当然这两步也可以合在一起. ref
Last updated
Was this helpful?