JAVA求回文数
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的思想也是避免"匹配"失败后的下标回退
下面正式开始分析算法
首先,我们需要了解一个叫做回文半径的东西
当前循环到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求回文数的更多相关文章
- JAVA 基础编程练习题25 【程序 25 求回文数】
25 [程序 25 求回文数] 题目:一个 5 位数,判断它是不是回文数.即 12321 是回文数,个位与万位相同,十位与千位相同. package cskaoyan; public class cs ...
- Java判断回文数算法简单实现
好久没写java的代码了, 今天闲来无事写段java的代码,算是为新的一年磨磨刀,开个头,算法是Java判断回文数算法简单实现,基本思想是利用字符串对应位置比较,如果所有可能位置都满足要求,则输入的是 ...
- c语言求回文数的三种算法的描述
c语言求回文数的三种算法的描述 题目描述 注意:(这些回文数都没有前导0) 1位的回文数有0,1,2,3,4,5,6,7,8,9 共10个: 2位的回文数有11,22,33,44,55,66,77,8 ...
- Java 9.回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true :否则,返回 false .回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 例如,121 是回文,而 123 不是. ...
- java基础——回文数判断
/** * 题目描述: * 有这样一类数字,他们顺着看和倒着看是相同的数,例如:121,656,2332等,这样的数字就称为:回文数字.编写一个函数,判断某数字是否是回文数字. * 要求实现方法: * ...
- java解决回文数
递归解决palindrome问题 如果String仅仅只是一个或者0个字符,则它就是palindrome 否则比较字符串第一个和最后一个字符 如果第一个和最后一个字符不同,那么就不是palindrom ...
- java判断回文数
- java例题_25 判断是否为回文数!
1 /*25 [程序 25 求回文数] 2 题目:一个 5 位数,判断它是不是回文数.即 12321 是回文数,个位与万位相同,十位与千位相同. 3 */ 4 5 /*分析 6 * 先用%和/将5个数 ...
- 回文数 第N个回文数
判断回文数还是不难,如果能转为字符串就更简单了. 如果是求第N个回文数呢. 12321是一个回文数,这里先考虑一半的情况. 回文数的个数其实是有规律的.如: 1位回文数: 9个 2位回文数: 9个 3 ...
随机推荐
- Linux打开关闭ping
#关闭 ” >/proc/sys/net/ipv4/icmp_echo_ignore_all #打开 ” >/proc/sys/net/ipv4/icmp_echo_ignore_all
- 政府网站综合防护系统(网防G01)
政府网站综合防护系统,简称“网防G01”,是首款专门针对政府网站及服务器等关键信息基础资源进行综合防护的产品,由公安部第一研究所和计算机病毒防治技术国家工程实验室(北京)研发. 网防G01的架构 由服 ...
- 树状数据删除(TP5)
应用场景:类似上图中树状菜单,选中一级菜单 点击上方删除按钮 所有子菜单删除 以下是代码截图(代码基于 TP5)
- Eclipes更改字体颜色
有图有真像 更改字体大小
- js全局变量优点和缺点
全局变量的优点:可以减少变量的个数,减少由于实际参数和形式参数的数据传递带来的时间消耗. 全局变量的缺点: (1)全局变量保存在静态存贮区,程序开始运行时为其分配内存,程序结束释放该内存.与局部变量的 ...
- Python List列表的操作说明
Python中List的N种操作,其简单程度令人叹为观止... C:\Users\rhys>python Python 2.7.14 (v2.7.14:84471935ed, Sep 16 20 ...
- camunda任务的一些简单操作
public class ZccTaskService { TaskService taskService; @Before public void init(){ ProcessEngineConf ...
- Oracle查询最近执行过的SQL语句
oracle 查询最近执行过的 SQL语句 select sql_text,last_load_time from v$sql order by last_load_time desc; SELECT ...
- [轉]关于CR0.WP
关于CR0.WP 我们知道CR0的WP位可以关闭内核写保护.他和页表的R/W位有关.Intel手册中的描述绕来绕去似乎一直没有说到重点. When the processor is in superv ...
- android中的SQLite数据库
SQLite是android中集成的一个轻量级的数据库,该数据库支持绝大部分SQL92语法 SQLiteDatabase代表一个数据库(底层就是一个数据库文件),一旦应用程序获得了代表指定数据库的SQ ...