题目描述
现在给你一个字符串S,请你计算S中有多少连续子串是回文串。
输入
输入包含多组测试数据。每组输入是一个非空字符串,长度不超过5000。
输出
对于每组输入,输出回文子串的个数。
样例输入
aba
aa
样例输出
4
3
时间限制:1 秒 内存限制: 32 MB
论坛上的代码已经被同学用去 机器会判抄袭 新手党没有C 币
http://blog.csdn.net/duan19920101/article/details/51482244
1楼我替你粘贴一下,楼主在在线等。。。
[cpp] view plain copy print?
//最长回文子串
#include <iostream>
using namespace std;
//*s为字符串,n为字符串的长度
int LagPalindrome(char *str, int n)
{
int count = 0;
int max = 0;//最长回文子串的长度
if (str == NULL || n<1)
{
return 0;
}
for (int i = 0; i < n; i++)
{
//子串为奇数时
for (int j = 0; (i-j)>=0&&(i+j)<n; j++)
{
if (str[i - j] != str[i + j])
{
break;
}
count = 2 * j + 1;
}
if (count > max)
{
max = count;
}
//子串为偶数时
for (int k = 0; (i - k)>=0 && (i + k + 1) < n; k++)
{
if (str[i - k] != str[i + k+1])
{
break;
}
count=2*k + 2;
}
if (count > max)
{
max =count ;
}
}
return max;
}
int main( )
{
char str[] = "abccba";
int n = strlen(str);
int MaxLen;
MaxLen = LagPalindrome(str, n);
cout << "最长回文子串的长度是:"<<MaxLen<<endl;
return 0;
}