zoukankan      html  css  js  c++  java
  • 1089 最长回文子串

    基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
     
     
    回文串是指aba、abba、cccbccc、aaaa这种左右对称的字符串。
    输入一个字符串Str,输出Str里最长回文子串的长度。
     
    Input
    输入Str(Str的长度 <= 100000)
    Output
    输出最长回文子串的长度L。
    Input示例
    daabaac
    Output示例
    5

    马拉车算法的模板题
    也算是又进一步理解马拉车算法了.

     1 //马拉车算法
     2 #include <bits/stdc++.h>
     3 #define N 1000000
     4 using namespace std;
     5 
     6 int resLen;
     7 int p[N];
     8 int Manacher(string s) {
     9     // Insert '#'
    10     string t = "$#";
    11     for (int i = 0; i < s.length(); ++i) {
    12         t += s[i];
    13         t += "#";
    14     }
    15     // Process t
    16     int mx = 0, id = 0, resLen = 0, resCenter = 0;
    17     for (int i = 1; i < t.length(); ++i) {
    18         //将重复找过的子串直接赋值,多的部分再自行分析
    19         p[i] = mx > i ? min(p[2 * id - i], mx - i) : 1;
    20         //多的部分自行分析
    21         while (t[i + p[i]] == t[i - p[i]]) 
    22             ++p[i];
    23         
    24         //更新最长到达右边的位置并且记录当前位置
    25         if (mx < i + p[i]) {
    26             mx = i + p[i];
    27             id = i;
    28         }
    29         //更新最长子串长度,以及半径长和当前位置
    30         if (resLen < p[i]) {
    31             resLen = p[i];
    32             // resCenter = i;
    33         }
    34     }
    35     // return s.substr((resCenter - resLen) / 2, resLen - 1);
    36     return resLen - 1;
    37 }
    38 
    39 string s;
    40 int main() {
    41     cin>>s;
    42     cout<<Manacher(s)<<endl;
    43     return 0;
    44 }
  • 相关阅读:
    实验3
    实验2
    实验1
    阿里云服务器搭建Halo博客系统
    移动开发技术(三)
    在服务器上部署Anki-Server
    软件测试技术(二)
    函数相关定理
    移动开发技术(一)
    高等数学函数求导
  • 原文地址:https://www.cnblogs.com/zllwxm123/p/9866036.html
Copyright © 2011-2022 走看看