JAVA求回文数
Manacher算法(马拉车算法)时间复杂度O(n)用过中心检测法(就是上面说的O(n2) O(n^2)O(n 其实在我看来,Manacher就是优化后的中心检测法,和KMP算法类似,Manacher的思想也是避免"匹配"失败后的下标回退 下面正式开始分析算法
============================================================================================
看了很多其他博主的博文,没有把最大回文序列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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |