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 ...
随机推荐
- (54) C# 调用 kernel32.dll
https://www.cnblogs.com/cwy173/archive/2010/10/02/1841321.html Kernel32 API AddAtom 向本地原子表添加一个字符串 Al ...
- 59、salesforce实现数据的批量处理
批处理,往自己的邮箱发一封邮件,批处理采用异步的处理方式处理数据,最多可以处理5000万条数据 global with sharing class MerchandiseBatch implement ...
- Centos7防火墙使用
修改时区 Centos7 #修改时区 timedatectl set-timezone Asia/Shanghai 开启防火墙 #添加一条规则 firewall-cmd --zone=public - ...
- adb 常用命令大全
adb 常用命令大全 1. 显示系统中全部Android平台: android list targets 2. 显示系统中全部AVD(模拟器): android list avd ...
- QQ邮箱客户端配置
接收协议:IMAP 接收邮箱服务器地址:imap.qq.com 端口:993 加密方法:TLS 发送协议:SMTP 发送服务器:smtp.qq.com 端口:465 加密方法:TLS
- 数据概览神器pandas_profiling
安装: pip install pandas_profiling 用法如下: import pandas as pd import pandas_profiling df = pd.read_exce ...
- 使用pip 时报错 Fatal error in launcher: Unable to create process using '"D:\pytghon2.7\python.exe" "D:\python2.7\S
无法创建使用pip.exe创建进程,说白了就是无法启动pip安装插件. 解决方法升级pip: python -m pip install -U pip
- 面向对象&从这里开始我们将不再是纯小白
一.面向对象初识 1.1 面向过程编程vs函数式编程 我们在没有学习函数的时候,写的代码都是面向过程式编程 # 面向过程编程 测量对象的元素的个数. s1 = 'fjdsklafsjda' count ...
- CTF中的AWD套路
今年参加了三起CTF比赛,属于初学者,基本除了web其他的不会,但分赛场AWD相对就没什么难度,基本都是技巧性.其中一场进入复赛了,本月底再次比赛(ctf题做的这么渣还能进也是绝了~),参照前人经验补 ...
- C#排序 转
本文链接:https://blog.csdn.net/fysuccess/article/details/36416255 C#中List<T>排序的两种方法 List<Studen ...