51Nod 1089 最长回文子串 V2(Manacher算法)

来源:互联网 发布:js多选日期插件 编辑:程序博客网 时间:2024/06/07 17:47

题目链接


要注意的就是strlen(s1)需要提前算出来,因为个人习惯喜欢在循环中使用。。

因为这个点超时一个下午没发现

#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<cmath>#include<vector>#include<queue>using namespace std;int a[50001];int n,k;int y;int main(){char s1[100001];char str[200000+50];gets(s1);int len=0;int num=strlen(s1);for(int i=0;i<num;i++){str[len++]='#';str[len++]=s1[i];}str[len++]='#';int le[200000+50]={0};int you=0,sum=0,id=0;for(int i=1;i<len;i++){if(you>i) le[i]=min(le[2*id-i],you-i);else le[i]=1;while(i-le[i]>=0&&i+le[i]<len&&str[i-le[i]]==str[i+le[i]])le[i]++;if(le[i]+i>you){you=le[i]+i;id=i;}sum=max(sum,le[i]);}cout<<--sum;return 0;}


阅读全文
1 0
原创粉丝点击