您的位置:首页 > 其它

最长回文子串 【朴素算法(枚举)】

2017-04-27 01:07 288 查看
回文串是指aba、abba、cccbccc、aaaa这种左右对称的字符串。

输入一个字符串Str,输出Str里最长回文子串的长度。

Input

输入Str(Str的长度 <= 1000)

Output

输出最长回文子串的长度L。

Sample Input

daabaac

Sample Output

5

思路: 朴素算法 ,我们可以枚举处于中间的数是哪个,对于aba型的,枚举b(可以从第一个位置到最后一个位置) ; 对于abba 可以枚举中间的数是哪个

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<set>
#define CLR(a,b) memset((a),(b),sizeof(a))
#define inf 0x3f3f3f3f
#define mod 100009
#define LL long long
#define M  10000
#define ll o<<1
#define rr o<<1|1
#define lson o<<1,l,mid
#define rson o<<1|1,mid+1,r
using namespace std;
char s[M];
int main()
{
gets(s);   //最长回文子串
int len=strlen(s);
int i,j;int ans=0;
for(i=
4000
0;i<len;i++) // 枚举中间数字的位置
{
for(j=1;i+j<len&&i-j>=0&&s[i+j]==s[i-j];j++) ;//aba型
ans=max(ans,2*(j-1)+1);
for(j=1;i+j<len&&i-j+1>=0&&s[i+j]==s[i-j+1];j++);//abba型
ans=max(ans,2*(j-1));
}
printf("%d\n",ans==1?0:ans);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: