给你10000长度字符串,然你求最长回文字串,输出长度,暴力算法肯定超时

#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
using namespace std;

void findBMstr(string& str){
    int p[str.size()+1];
    memset(p, 0, sizeof(p));
    int mx = 0, id = 0;
    for(int i = 1; i <=  str.size(); i++){
        if(mx > i){
            //i的对称点的右边界是否过mx界,没有就取其对称点的值,否则就取当前可取的最大值(mx-i)
            p[i] = (p[2*id - i] < (mx - i) ? p[2*id - i] : (mx - i));
        }else{
            //意思是当前的点为止,就赋值为1
            p[i] = 1;
        }
        while(str[i - p[i]] == str[i + p[i]]){
            p[i]++;//一直向两边拓展
        }
        if(i + p[i] > mx){//更新id值为边界大的那个
            mx = i + p[i];
            id = i;
        }
    }
    printf("\n");
    int max = 0, ii;
    for(int i = 1; i < str.size(); i++){
        if(p[i] > max){//寻找最值,以及索引
            ii = i;
            max = p[i];
        }
    }

    max--;
    cout << max << endl;
}

int main()
{
    string str;
    cin >> str;
    string str0;
    str0 += "$#";
    for(int i = 0; i < str.size(); i++){
        str0 += str[i];
        str0 += "#";
    }
    findBMstr(str0);
    return 0;
}

Manacher算法,最长回文串的更多相关文章

  1. Manacher 算法-----o(n)回文串算法

    回文的含义是:正着看和倒着看相同,如abba和yyxyy        Manacher算法基本要点:用一个非常巧妙的方式,将所有可能的奇数/偶数长度的回文子串都转换成了奇数长度:在每个字符的两边都插 ...

  2. Manacher算法——最长回文子串

    一.相关介绍 最长回文子串 s="abcd", 最长回文长度为 1,即a或b或c或d s="ababa", 最长回文长度为 5,即ababa s="a ...

  3. manacher算法,求回文串

    用来求字符串最长回文串或者回文串的总数量 #include<map> #include<queue> #include<stack> #include<cma ...

  4. Manacher(最长回文串)

    http://acm.hdu.edu.cn/showproblem.php?pid=3068 最长回文 Problem Description 给出一个只由小写英文字符a,b,c...y,z组成的字符 ...

  5. Manacher 计算最长回文串

    转自 http://blog.sina.com.cn/s/blog_3fe961ae0101iwc2.html 寻找字符串中的回文,有特定的算法来解决,也是本文的主题:Manacher算法,其时间复杂 ...

  6. Manacher算法----最长回文子串

    题目描述 给定一个字符串,求它的最长回文子串的长度. 分析与解法 最容易想到的办法是枚举所有的子串,分别判断其是否为回文.这个思路初看起来是正确的,但却做了很多无用功,如果一个长的子串包含另一个短一些 ...

  7. LeetCode 5 Longest Palindromic Substring manacher算法,最长回文子序列,string.substr(start,len) 难度:2

    https://leetcode.com/problems/longest-palindromic-substring/ manacher算法相关:http://blog.csdn.net/ywhor ...

  8. Manacher算法 - 求最长回文串的利器

    求最长回文串的利器 - Manacher算法 Manacher主要是用来求某个字符串的最长回文子串. 不要被manacher这个名字吓倒了,其实manacher算法很简单,也很容易理解,程序短,时间复 ...

  9. Manacher's Algorithm 马拉车算法(最长回文串)

    这个马拉车算法Manacher‘s Algorithm是用来查找一个字符串的最长回文子串的线性方法,由一个叫Manacher的人在1975年发明的,这个方法的最大贡献是在于将时间复杂度提升到了线性,这 ...

随机推荐

  1. mysql系列(2)之 DDL语句

    1.创建数据库test1:create database test1; 2.查询系统中都存在哪些数据库:show databases; 3.选择数据库:use test1; 4.查看数据库中所有的表: ...

  2. Django的rest_framework的序列化组件之序列化多表字段的方法

    首先,因为我们安装了restframework,所以我们需要在django的settings中引入restframework INSTALLED_APPS = [ 'django.contrib.ad ...

  3. LRU缓存原理

    LRU(Least Recently Used)  LRU是近期最少使用的算法,它的核心思想是当缓存满时,会优先淘汰那些近期最少使用的缓存对象. 采用LRU算法的缓存有两种:LrhCache和DisL ...

  4. PullToRefreshView的样式以及一些问题

    首先说  PulltorefreshListView  PullToRefreshGridView  PullToRefreshWebView PullToRefreshScrollView Pull ...

  5. jwplayer使用方法

    网盘:https://pan.baidu.com/s/1mmtppZSFOni5tLI2TJWKrw <script type="text/javascript"> v ...

  6. STL set,mulityset用法

    #include<iostream> #include <set> using namespace std; template <class T> class Ru ...

  7. html标签二

    1.没有前后顺序的信息列表<ul> <li></li> <li></li></ul>2.有序列表 <ol>  < ...

  8. 8N - 水果

    夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了 ...

  9. 肤色检测一例-使用rgb颜色模型

    代码: /* 输入:rgb图像 输出:与输入图像尺寸相同的灰度图,若rgb图中某像素检测为肤色,则灰度图中对应像素为255,否则为0 */ void SkinRGB( Mat &rgb,Mat ...

  10. angular2.0学习笔记4.npm常用指令记录及angular语法

    以下命令,都需要在命令行窗口中,先切入到项目文件夹目录,再执行 1.npm start 这个命令会在“监听”模式下运行TypeScript编译器,当代码变化时,它会自动重新编译. 同时,该命令还会在浏 ...