Palindrome Partitioning II(Hard)
Given a strings, partitionssuch that every substring of the partition is a palindrome.
Return the minimum cuts needed for a palindrome partitioning ofs.
For example, givens="aab"
,
Return1
since the palindrome partitioning["aa","b"]
could be produced using 1 cut.
- Palindrome Partitioning II
【分析】
重述题意:输入一个字符串,将其进行分割,分割后各个子串必须是“回文”结构,要求最少的分割次数。显然,为了求取最少分割次数,一个简单的思路是穷尽所有分割情况,再从中找出分割后可构成回文子串且次数最少的分割方法。
解题思路:对于输入字符串如s=“aab”,一个直观的思路是判断“aab”是否构成回文,根据回文的特点是对称性,那么,我们可以判断s[0]与s[2]是否相等,不等,因此“aab”不能构成回文,此后再怎么判断呢???这种无章法的操作没有意义,因为一个字符串构成回文的情况是很复杂的,对于一个长度为n的字符串,其构成回文的子串长度可能的长度分布范围可以是1—n:整体构成回文如“baab”,则子串长度可为n=4;如“cab”,只能构成长度为1的回文子串。
鉴于上述分析,对于一个字符串,我们需要考虑所有可能的分割,这个问题可以抽象成一个DP问题,对于一个长度为n的字符串,设DP\[i\]\[j\]表示第i个字符到第j个字符是否构成回文,若是,则DP\[i\]\[j\]=1;若否,则DP\[i\]\[j\]=0;如此,根据回文的约束条件(对称性),DP\[i\]\[j\]构成回文需满足: