最长回文串的问题,在小白书上看到的,感觉很有效率的代码,从中间元素开始搜索,
下标还是需要理解一番的,画一个图应该就很清楚了,奇数和偶数处理方式不同。
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
char s[1005];
int main()
{
int n, maxn=0, i, j;
gets(s);
n = strlen(s);
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 > maxn)
maxn = 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>maxn)
maxn = j*2+2;
}
}
cout << maxn << endl;
return 0;
}