Manacher算法(马拉车算法)时间复杂度O(n)

用过中心检测法(就是上面说的O(n2) O(n^2)O(n
)的算法)的都知道对于奇数回文串和偶数回文串的处理是不同的,奇数回文串有2n+1 2n+12n+1个字符,所以中心字符一定只有一个。而同理,对于偶数回文串,中心字符有2个。这样1个和2个的情况不好处理,所以我们将给出的串统一转化为奇数回文串。我们将每一个字符的左边和右边都添加一个字符(这个字符是输入中所没有的)。一般都为#。比如说abc和abcd这两个串转化后就为#a#b#c#和#a#b#c#d#。长度分别为7 77和9 99这样无论奇偶都能被转换成奇数回文串了.

其实在我看来,Manacher就是优化后的中心检测法,和KMP算法类似,Manacher的思想也是避免"匹配"失败后的下标回退

下面正式开始分析算法
首先,我们需要了解一个叫做回文半径的东西

https://blog.csdn.net/bestsort/article/details/81637464

============================================================================================
看了很多其他博主的博文,没有把最大回文序列R将清楚,R存在的意义到底是什么?
 
找了别人的代码改了一下查看abaaba的Mancher的运算过程
 String str = "abaaba";

当前循环到i=0
当前元素为=#
当前最大回文半径R=0
当前中心位置flag=0
当前最大半径r=1
=============================
当前循环到i=1
当前元素为=a
当前最大回文半径R=2
当前中心位置flag=1
当前最大半径r=2
=============================
当前循环到i=2
当前元素为=#
当前最大回文半径R=2
当前中心位置flag=2
当前最大半径r=2
=============================
当前循环到i=3
当前元素为=b
当前最大回文半径R=6
当前中心位置flag=3
当前最大半径r=4
=============================
当前循环到i=4
当前元素为=#
当前最大回文半径R=6
当前中心位置flag=3
当前最大半径r=4
=============================
当前循环到i=5
当前元素为=a
当前最大回文半径R=6
当前中心位置flag=5
当前最大半径r=4
=============================
当前循环到i=6
当前元素为=#
当前最大回文半径R=12
当前中心位置flag=6
当前最大半径r=7
=============================
当前循环到i=7
当前元素为=a
当前最大回文半径R=12
当前中心位置flag=6
当前最大半径r=7
=============================
当前循环到i=8
当前元素为=#
当前最大回文半径R=12
当前中心位置flag=6
当前最大半径r=7
=============================
当前循环到i=9
当前元素为=b
当前最大回文半径R=12
当前中心位置flag=9
当前最大半径r=7
=============================
当前循环到i=10
当前元素为=#
当前最大回文半径R=12
当前中心位置flag=9
当前最大半径r=7
=============================
当前循环到i=11
当前元素为=a
当前最大回文半径R=12
当前中心位置flag=11
当前最大半径r=7
=============================
当前循环到i=12
当前元素为=#
当前最大回文半径R=12
当前中心位置flag=12
当前最大半径r=7
=============================
6

JAVA求回文数的更多相关文章

  1. JAVA 基础编程练习题25 【程序 25 求回文数】

    25 [程序 25 求回文数] 题目:一个 5 位数,判断它是不是回文数.即 12321 是回文数,个位与万位相同,十位与千位相同. package cskaoyan; public class cs ...

  2. Java判断回文数算法简单实现

    好久没写java的代码了, 今天闲来无事写段java的代码,算是为新的一年磨磨刀,开个头,算法是Java判断回文数算法简单实现,基本思想是利用字符串对应位置比较,如果所有可能位置都满足要求,则输入的是 ...

  3. c语言求回文数的三种算法的描述

    c语言求回文数的三种算法的描述 题目描述 注意:(这些回文数都没有前导0) 1位的回文数有0,1,2,3,4,5,6,7,8,9 共10个: 2位的回文数有11,22,33,44,55,66,77,8 ...

  4. Java 9.回文数

    给你一个整数 x ,如果 x 是一个回文整数,返回 true :否则,返回 false .回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数.    例如,121 是回文,而 123 不是. ...

  5. java基础——回文数判断

    /** * 题目描述: * 有这样一类数字,他们顺着看和倒着看是相同的数,例如:121,656,2332等,这样的数字就称为:回文数字.编写一个函数,判断某数字是否是回文数字. * 要求实现方法: * ...

  6. java解决回文数

    递归解决palindrome问题 如果String仅仅只是一个或者0个字符,则它就是palindrome 否则比较字符串第一个和最后一个字符 如果第一个和最后一个字符不同,那么就不是palindrom ...

  7. java判断回文数

  8. java例题_25 判断是否为回文数!

    1 /*25 [程序 25 求回文数] 2 题目:一个 5 位数,判断它是不是回文数.即 12321 是回文数,个位与万位相同,十位与千位相同. 3 */ 4 5 /*分析 6 * 先用%和/将5个数 ...

  9. 回文数 第N个回文数

    判断回文数还是不难,如果能转为字符串就更简单了. 如果是求第N个回文数呢. 12321是一个回文数,这里先考虑一半的情况. 回文数的个数其实是有规律的.如: 1位回文数: 9个 2位回文数: 9个 3 ...

随机推荐

  1. 异步编程与scrapy

    https://python-parallel-programmning-cookbook.readthedocs.io/zh_CN/latest/chapter1/index.html https: ...

  2. Tomcat_shutdown

    @echo off echo 执行开始时间 date/t time/t echo *********************************************** echo 正在关闭To ...

  3. day 53-1 Django基础三之视图函数

    Django基础三之视图函数   本节目录 一 Django的视图函数view 二 CBV和FBV 三 使用Mixin 四 给视图加装饰器 五 Request对象 六 Response对象 一 Dja ...

  4. Vue环境搭建及第一个helloWorld

    Vue环境搭建及第一个helloWorld 一.环境搭建 1.node.js环境安装配置  https://www.cnblogs.com/liuqiyun/p/8133904.html 或者 htt ...

  5. Django框架(十六)—— cookie和session组件

    目录 cookie和session组件 一.cookie 1.cookie的由来 2.什么是cookie 3.cookie的原理 4.cookie的覆盖 5.在浏览器中查看cookie 6.cooki ...

  6. jumpserver注意事项以及报错处理

    需要注意下面亮点 在使用jumpserver过程中,有一步是系统用户推送,要推送成功,client(后端服务器)要满足以下条件: 后端服务器需要有python.sudo环境才能使用推送用户,批量命令等 ...

  7. spring事务实现的几种方式

    1.编程式事务管理对基于POJO的应用来说是唯一选择. 需要在代码中调用 beginTransaction() commit() rollback()等事务管理相关的方法. 2.基于Transacti ...

  8. ubuntu批量转换所有子文件夹下图片文件格式

    第一步按照 sudo apt-get install imagemagick 对于一个文件,可以: convert ubuntuhandbook.png ubuntuhandbook.jpg 对于多个 ...

  9. 【学术篇】The Xuanku Inversion Magic学习笔记

    退役之前写的 然后因为退役就咕咕咕了... 后来发现数学考试能用的到个鬼就发布出来了QwQ 主要是方便自己没登录的时候查阅... 显然子集什么的是没有学会的QwQ 所以学OI的话不要看本文!!!!!& ...

  10. 【sql】leetcode习题 (共 42 题)

    [175]Combine Two Tables (2018年11月23日,开始集中review基础) Table: Person +-------------+---------+ | Column ...