zoukankan      html  css  js  c++  java
  • 最长回文 HDU

    题意:找串的最长回文字串(连续)

    题解:manacher版题

    一些理解:首位加上任意两个字符是为了判断边界。

         本算法主要是为了

          1.省去奇偶分类讨论。

          2.防止形如aaaaaaa的串使得暴力算法蜕化为n^2;

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<queue>
    #include<algorithm>
    #include<iostream>
    #include<vector>
    #include<string.h>
    using namespace std;
    const int maxn = 3e5;;
    char s[maxn], str[maxn];
    int len1, len2, p[maxn], ans;
    
    void init() {
        str[0] = '$';
        str[1] = '#';
        for (int i = 0; i < len1; i++) {
            str[i * 2 + 2] = s[i];
            str[i * 2 + 3] = '#';
        }
        len2 = len1 * 2 + 2;
        str[len2] = '*';
    }
    void manacher() {
        int id = 0,mx = 0;
        for (int i = 1; i < len2; i++) {
            if (mx > i)p[i] = min(p[2 * id - i], mx - i);
            else p[i] = 1;
            for (; str[i + p[i]] == str[i - p[i]]; p[i]++);
            if (p[i] + i > mx) {
                mx = p[i] + i;
                id = i;
            }
        }
    }
    
    int main() {
        while (scanf("%s", s) != EOF) {
            len1 = strlen(s);
            init();
            ans = 0;
            manacher();
            for (int i = 0; i < len2; i++) {
                ans = max(ans, p[i]);
            }
            cout << ans-1 << endl;
        }
    }
    成功的路并不拥挤,因为大部分人都在颓(笑)
  • 相关阅读:
    GIt如何进行代码管理
    GIt如何安装使用
    selenium+xpath在不同层级的写法
    Java+Selenium 常见问题QA
    Java+Selenium如何解决空指针
    python 发邮件
    用apscheduler写python定时脚本
    http断点续传的原理
    好的代码是重构出来的
    python写excel总结
  • 原文地址:https://www.cnblogs.com/SuuT/p/8762407.html
Copyright © 2011-2022 走看看