zoukankan      html  css  js  c++  java
  • hdu3068 最长回文 manacher

    给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.
    回文就是正反读都是一样的字符串,如aba, abba等

    manacher裸题

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<algorithm>
     4 using namespace std;
     5 
     6 const int maxn=11e4+5;
     7 char s[maxn],t[maxn<<1];
     8 int p[maxn<<1];
     9 
    10 void manacher(){
    11     int len=strlen(s),l=0;
    12     t[l++]='$';
    13     t[l++]='#';
    14     for(int i=0;i<len;++i){
    15         t[l++]=s[i];
    16         t[l++]='#';
    17     }
    18     t[l]=0;
    19     int maxx=0,num=0;
    20     for(int i=0;i<l;++i){
    21         p[i]=maxx>i?min(p[2*num-i],maxx-i):1;
    22         while(t[i+p[i]]==t[i-p[i]])p[i]++;
    23         if(i+p[i]>maxx){
    24             maxx=i+p[i];
    25             num=i;
    26         }
    27     }
    28 }
    29 
    30 int main(){
    31     while(scanf("%s",s)!=EOF){
    32         manacher();
    33         int l=strlen(s);
    34         int ans=0;
    35         for(int i=0;i<2*l+2;++i){
    36             if(p[i]-1>ans)ans=p[i]-1;
    37         }
    38         printf("%d
    ",ans);
    39     }
    40     return 0;
    41 }
    View Code
  • 相关阅读:
    Jeninks远程部署war包
    DOCKER中centos7的中文支持
    正则四
    正则三
    正则二
    正则一
    SHELL小练习
    SHELL用法九(awk练习)
    SHELL用法八(Grep语句)
    SHELL用法七(Sed语句)
  • 原文地址:https://www.cnblogs.com/cenariusxz/p/6592537.html
Copyright © 2011-2022 走看看