zoukankan      html  css  js  c++  java
  • hihoCoder#1032 : 最长回文子串

    #1032 : 最长回文子串

    时间限制:1000ms
    单点时限:1000ms
    内存限制:64MB

    描述

       小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进。

       这一天,他们遇到了一连串的字符串,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能分别在这些字符串中找到它们每一个的最长回文子串呢?”

       小Ho奇怪的问道:“什么叫做最长回文子串呢?”

       小Hi回答道:“一个字符串中连续的一段就是这个字符串的子串,而回文串指的是12421这种从前往后读和从后往前读一模一样的字符串,所以最长回文子串的意思就是这个字符串中最长的身为回文串的子串啦~”

       小Ho道:“原来如此!那么我该怎么得到这些字符串呢?我又应该怎么告诉你我所计算出的最长回文子串呢?

       小Hi笑着说道:“这个很容易啦,你只需要写一个程序,先从标准输入读取一个整数N(N<=30),代表我给你的字符串的个数,然后接下来的就是我要给你的那N个字符串(字符串长度<=10^6)啦。而你要告诉我你的答案的话,只要将你计算出的最长回文子串的长度按照我给你的顺序依次输出到标准输出就可以了!你看这就是一个例子。”

    提示一 提示二 提示三 提示四

    样例

    样例输入
    3
    abababa
    aaaabaa
    acacdas
    样例输出
    7
    5
    3

    分析

    manacher算法模板题。

    code

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 #define MAXN 3000000
     5 using namespace std;
     6 
     7 char s[MAXN],str[MAXN];
     8 int p[MAXN],len,mx,id;
     9 
    10 void init()
    11 {
    12     len = strlen(s);
    13     str[0] = '$';
    14     str[1] = '#';
    15     for (int i=0; i<len; i++)
    16     {
    17         str[i*2+2] = s[i];
    18         str[i*2+3] = '#';
    19     }
    20     len = len*2+2;
    21     str[len] = 0;
    22 }
    23 int manacher()
    24 {
    25     mx = 0;
    26     for (int i=1; i<len; ++i)
    27     {
    28         if (mx>i) p[i] = min(p[2*id-i],mx-i);
    29         else p[i] = 1;
    30         while (str[i+p[i]]==str[i-p[i]]) p[i]++;
    31         if (p[i]+i>mx)
    32         {
    33             mx = p[i]+i;
    34             id = i;
    35         }
    36     }
    37     int ans = 1;
    38     for (int i=1; i<len; ++i) ans = max(ans,p[i]);
    39     return ans-1;
    40 }
    41 int main()
    42 {
    43     int t;
    44     scanf("%d",&t);
    45     while (t--)
    46     {
    47         scanf("%s",s);
    48         init();
    49         printf("%d
    ",manacher());
    50     }
    51     return 0;
    52 }
  • 相关阅读:
    css3 奇技淫巧
    html 转义处理
    从前端中的IOC理念理解koa中的app.use()
    树形操作2-或、且关系组合
    树形操作1-树形拖拽选择
    vscode 编辑器常用快捷键
    日期相关的一些简单计算:格式化,上个月,前一天
    spring整合Mybati时,只报空指针异常问题
    使用Mybatis Generator插件自动生成映射文件(cmd无法进入文件,dns服务器对区域没有权威等问题)遇到问题
    spring整合mybatis接口无法注入问题
  • 原文地址:https://www.cnblogs.com/mjtcn/p/7159680.html
Copyright © 2011-2022 走看看