题目:给定一个字符串,求出它的最长回文子串的长度。
如何进行高效判断呢?如果一段字符串是回文串,那么以某个子字符为中心的前缀和后缀必定是相同的,因此,我们可以枚举中心位置,然后再在改位置上拓展,记录并更新得到最新的的最长回文子串。
代码如下;
int LongestPalindrome(const char *s,int n)
{
int i,j,max,c;
if(s==0||n<1)
{
return 0;
}
max=0;
//以i为回文中心位置
for(i=0;i<n;i++)
{
//回文数长度为奇数
for (j=0;(i-j>=0)&&(i+j<n);++j)
{
if(s[i-j]!=s[i+j])
{
break;
}
c=j*2+1;
}
if(c>max)
{
max=c;
}
//回文长度为偶数
for(int j=0;(i-j>=0)&&(i+j+1<n);++j)
{
if(s[i-j]!=s[i+j+1];
{
break;
}
c=j*2+2;
}
if(c>max)
{
max=c;
}
}
return max;
}