第七题: 回文串的分割
描述
给出一个字符串s,分割s使得分割出的每一个子串都是回文串
计算将字符串s分割成回文分割结果的最小切割数
例如:给定字符串s="aab",
返回1,因为回文分割结果["aa","b"]是切割一次生成的。
示例1
输入:"aab"
复制返回值:1
问题: 求s的最小的分割次数
状态F(i): s的前i个字符最小的分割次数
状态转移方程:
情况1: 当F(i):(1,i)本身就是回文串时,不需要分割,返回0
情况2: F9i)不是回文串,但是在 j < i && [ j+1, i ] 是回文串,则返回 min( F(i), F(j) + 1))
比如 aab 中F(3) 不是回文串,但是 F(2) = aa && [3] = b 则返回 F(2) + 1
初始状态: F(i) = i - 1 (就是把字符串切割成单个字符,所需 i - 1 步)
返回结果: F(n)
public class Solution {
//判断是否回文串
public boolean isPal(String s, int start, int end){
while(start < end){
if(s.charAt(start) != s.charAt(end))
return false;
++start;
--end;
}
return true;
}
public int minCut(String s) {
int len = s.length();
if(len == 0)
return 0;
int[] minCut = new int[len + 1];
// F(i)初始化