zoukankan      html  css  js  c++  java
  • manacher马拉车

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstring>
     4 using namespace std;
     5 
     6 char ss[110005],s[220010];
     7 int p[220010];
     8 
     9 int init()
    10 {
    11     s[0]='$'; s[1]='#';
    12     int g=2;
    13     for(int i=0;ss[i]!='';i++)
    14     {
    15         s[g++]=ss[i];
    16         s[g++]='#';
    17     }
    18     s[g]='';
    19     return g; //·µ»Ø³¤¶È
    20 }
    21 int manacher()
    22 {
    23     int len =init();
    24     int maxlen =-1;
    25 
    26     int id;
    27     int mx= 0;
    28 
    29     for(int i=1;i<len;i++)
    30     {
    31         if(i<mx) p[i]=min( p[2*id-i], mx-i);
    32         else p[i]=1;
    33 
    34         while(s[i-p[i]] == s[i+p[i]] )
    35             p[i]++;
    36 
    37         if(i+p[i] > mx)
    38         {
    39             id=i;
    40             mx=p[i]+i;
    41         }
    42         maxlen=max(maxlen,p[i]-1);
    43     }
    44     return maxlen;
    45 
    46 }
    47 
    48 int main()
    49 {
    50     ios::sync_with_stdio(false);
    51     while(cin>>ss)
    52     {
    53         int res=manacher();
    54         cout<<res<<endl;
    55     }
    56 }
  • 相关阅读:
    HandlerThread
    handler原理
    死锁简析
    Android序列化
    AsyncTask原理
    【java线程池】
    java创建线程的三种方式
    service相关
    【hashMap】详谈
    【activity任务栈】浅析
  • 原文地址:https://www.cnblogs.com/thunder-110/p/9322138.html
Copyright © 2011-2022 走看看