•题意
•思路一
定义 dp[i] 表示 0~i 的最少划分数;
首先,用马拉车算法求解出回文半径数组;
对于第 i 个字符 si,遍历 j (0 ≤ j < i),判断以 j 为回文中心的最大回文串是否包含 si;
如果包含,dp[ i ]=min{dp[ i ],dp[2*j-i-1]+1};
•Code
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=1e3+50; 4 5 char t[maxn]; 6 int r[maxn<<1]; 7 8 struct Manacher 9 { 10 char s[maxn<<1]; 11 void Init(char *ss,int len) 12 { 13 int index=0; 14 s[index++]='#'; 15 for(int i=0;i < len;++i) 16 { 17 s[index++]=ss[i]; 18 s[index++]='#'; 19 } 20 s[index]='