zoukankan      html  css  js  c++  java
  • HDU3068最长回文马拉车算法模板题

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

    Input输入有多组case,不超过120组,每组输入为一行小写英文字符a,b,c...y,z组成的字符串S 
    两组case之间由空行隔开(该空行不用处理) 
    字符串长度len <= 110000Output每一行一个整数x,对应一组case,表示该组case的字符串中所包含的最长回文长度. 


    Sample Input

    aaaa
    
    abab

    Sample Output

    4
    3

     1 #include<stdio.h>
     2 #include<iostream>
     3 #include<string.h>
     4 using namespace std;
     5 const int N=110020;
     6 
     7 char a[N];
     8 char m[N*2];
     9 int f[N*2];
    10 int k;
    11 
    12 void manacher(char *a,int len)
    13 {
    14     k=0;
    15     m[k++]='$';
    16     m[k++]='#';
    17     for(int i=0; i<len; i++)
    18     {
    19         m[k++]=a[i];
    20         m[k++]='#';
    21     }
    22     m[k]='\0';//或者加其他的只要不是#$字母都可以
    23     int mx=0,id=0;
    24     for(int i=1; i<k; i++) //??
    25     {
    26 //      if(mx-i<=ans[i])
    27 //        ans[i]=mx-i;
    28 //      else if(mx-i>ans[i])
    29         if(i>=mx)
    30             f[i]=1;
    31         else if(i<mx)
    32         {
    33 //            f[i]=min(f[2*id-i],mx-i);
    34             if(mx-i>=f[2*id-i])//if(mx-i<=f[j])
    35                 f[i]=f[2*id-i];
    36             else if(mx-i<f[2*id-i])//else if(mx-i<f[j])
    37                 f[i]=mx-i;
    38         }
    39         while(m[i-f[i]]==m[i+f[i]])
    40             f[i]++;
    41         if(f[i]+i>mx)
    42         {
    43             mx=f[i]+i;
    44             id=i;
    45         }
    46     }
    47 }
    48 
    49 int main()
    50 {
    51     while(~scanf("%s",a))
    52     {
    53         int len=strlen(a);
    54         manacher(a,len);
    55         int ans=-1;
    56         for(int i=0;i<k;i++)
    57             ans=max(ans,f[i]-1);
    58         printf("%d\n",ans);
    59     }
    60     return 0;
    61 }
    
    
    
     
  • 相关阅读:
    前端 HTML CSS
    前端部分1:HTML
    异常处理专区:
    IO模型介绍
    协程专区
    线程专区
    操作系统简介专区
    进程专区
    正则表达式专区:
    题解 P2158 【[SDOI2008]仪仗队】
  • 原文地址:https://www.cnblogs.com/OFSHK/p/11368399.html
Copyright © 2011-2022 走看看