zoukankan      html  css  js  c++  java
  • POJ 3974 Palindrome(最长回文子串)

    题目链接:http://poj.org/problem?id=3974

    题意:求一给定字符串最长回文子串的长度

    思路:直接套模板manacher算法

    code:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 using namespace std;
     5 const int MAXN = 1000010;
     6 char Ma[2*MAXN];
     7 int Mp[2*MAXN];
     8 
     9 void Manacher(char s[], int len)
    10 {
    11     int l = 0;
    12     Ma[l++] = 'S';
    13     Ma[l++] = '#';
    14     for (int i = 0; i < len; ++i)
    15     {
    16         Ma[l++] = s[i];
    17         Ma[l++] = '#';
    18     }
    19     Ma[l] = 0;
    20     int mx = 0;
    21     int id = 0;
    22     for (int i = 0; i < l; ++i)
    23     {
    24         Mp[i] = mx > i ? min(Mp[2*id-i], mx-i) : 1;
    25         while (Ma[i+Mp[i]] == Ma[i-Mp[i]]) ++Mp[i];
    26         if (i + Mp[i] > mx)
    27         {
    28             mx = i +Mp[i];
    29             id = i;
    30         }
    31     }
    32 }
    33 
    34 char s[MAXN];
    35 
    36 int main()
    37 {
    38     int cnt = 0;
    39     while (scanf("%s", s) != EOF)
    40     {
    41         if (strcmp(s, "END") == 0) break;
    42         int len = strlen(s);
    43         Manacher(s, len);
    44         int ans = 0;
    45         len = 2 * len + 2;
    46         for (int i = 0; i < len; ++i) ans = max(ans, Mp[i] - 1);
    47         printf("Case %d: %d
    ",++cnt, ans);
    48     }
    49     return 0;
    50 }
  • 相关阅读:
    MySQL教程22-字符串类型
    MySQL教程21-日期和时间类型
    MySQL教程20-小数类型
    MySQL教程19-整数类型
    MySQL教程18-数据类型简介
    ActiveMQ_topic
    ActiveMQ_消费者编码
    ActiveMQ_生产者编码
    ActiveMQ介绍
    管理docker容器
  • 原文地址:https://www.cnblogs.com/ykzou/p/4462941.html
Copyright © 2011-2022 走看看