最长回文子串
题目描述
给定一个字符串,求它的最长回文子串的长度。
思路一:从中心进行枚举,判断回文的长度,时间复杂度O(n^2)
int longestPalindrome(const char*s ,int n)
{
int i,j,max;
if(s==NULL || n<1)
return 0;
max = 0;
for(i=0;i<n;i++)
{
for(j=0;(i-j>=0) && (i+j<=n);j++)//回文子串长度为奇数
{
if(s[i-j] != s[i+j])
break;
if(j*2+1>max)
max = j*2+1;
}
for(j=0;(i-j>=0) && (i+j+1<=n);j++)//回文子串长度为偶数
{
if(s[i-j] != s[i+j+1])
break;
if(j*2+2>max)
max = j*2 + 2;
}
}
return max;
}
思路二:
Manacher算法