码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 3068 [最长回文子串]

时间:2016-05-04 16:56:36      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

#include<iostream>
#include<string>
#include<string.h>
#include<algorithm>
#define MAX_LEN 310000
using namespace std;
int p[MAX_LEN];
int findBMstr(string &str){
    int maxx=-1;
    memset(p,0,sizeof(p));
    int mx=0,id=0;
    for(int i=1;i<=str.size();i++){
        if(mx>i){
            p[i]=min(p[2*id-i],mx-i);
        }
        else{
            p[i]=1;
        }
        while(str[i-p[i]]==str[i+p[i]])
            p[i]++;
        maxx=max(maxx,p[i]);
        if(i+p[i]>mx){
            mx=i+p[i];
            id=i;
        }
    }
    return maxx-1;
}
int main()
{
    string str;
    while(cin>>str){
        string str0;
        str0 +="$#";
        for(int i=0;i<str.size();i++){
            str0+=str[i];
            str0+="#";
        }
        cout<< findBMstr(str0) << endl;
    }
    return 0;
}

 

HDU 3068 [最长回文子串]

标签:

原文地址:http://www.cnblogs.com/tun117/p/5458840.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!