题目描述
给你一个字符串 s
,请你将s
分割成一些子串,使每个子串都是回文。
返回符合要求的 最少分割次数 。
样例
输入:s = "aab"
输出:1
解释:只需一次分割就可将 s 分割成 ["aa","b"] 这样两个回文子串。
算法
动态规划
f(i)表示的是以i结尾的字符串所包含回文子串的数量
0-i 划分为 0-k-1(以k-1结尾包含回文串的最小数量)、k-i(最后一段)
即递推式:f[i] = min(f[k - 1] + 1, f[i])
!因为我这里下标是从0开始的,所以当k==0时要特判一下
不加预处理优化会将时间复杂度划至 O ( n 3 ) O(n^3) O(n3),使用与处理后会缩减至 O ( n 2 ) O(n^2) O(n2)