中心扩展法:
求解字符串中的回文子串,分奇偶讨论,从枚举的每个元素为中心,向两边扩展,如果扩展的两个字符相等,则说明是回文的,如果当前扩展的回文串的长度大于等于k则更新答案。
枚举的同时用f数组来维护每个元素作为右端点,符合条件的回文子串的最大数目。
class Solution {
public:
int maxPalindromes(string s, int k) {
int n=s.size();
int f[n+1];
memset(f,0,sizeof f);
for(int i=0;i<2*n-1;i++){
int l=i/2;
int r=l+i%2;
f[l+1]=max(f[l+1],f[l]);
while(l>=0&&r<n&&s[l]==s[r]){
if(r-l+1>=k) f[r+1]=max(f[r+1],f[l]+1);
l--,r++;
}
}
return f[n];
}
};
时间复杂度:O(n^2)
空间复杂度:O(n)