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;
        }
    }
    成功的路并不拥挤,因为大部分人都在颓(笑)
  • 相关阅读:
    SAP 锁对象
    smartforms取消word为默认编辑器
    abap 配置 zconfig
    Ant步步为营(1)解压本地的zip包
    点击页面出现文字动画
    js简单实现累加
    github发布线上项目
    jsonp的实现
    js操作class
    js开发实用技巧
  • 原文地址:https://www.cnblogs.com/SuuT/p/8762407.html
Copyright © 2011-2022 走看看