题目
原题链接 HihoCoder - 1032
就是最长回文子串
Sample Input
3
abababa
aaaabaa
acacdas
Sample Output
7
5
3
思路
以某个位置为中心位置,向两边扩展判断是否是回文串,再判断是否为最长回文串(注意边界处理)
代码
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <iomanip>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#define pi 3.14159265
using namespace std;
//map<string, int> rr;
int len;
char st[20202020];
int main()
{
int n;
cin >> n;
while(n--)
{
int s, e, l, maxe = 0;
st[0] = 1;//边界处理 让左边不等于右边界
cin >> st+1;//整个字符串向后移一位 从1开始存
int len = strlen(st);
for (int i = 1; i < len;i++)
{
s = e = i;
while(st[i]==st[e+1])
{
e++;
}
i = e;
while(st[s-1]==st[e+1])
{
s--;
e++;
}
l = e - s + 1;
if(l>maxe)
maxe = l;
}
cout << maxe << endl;
}
}