HDU 3068 manachar(马拉车)算法 求最长回文子串
来源:互联网 发布:珠三角物流网络 编辑:程序博客网 时间:2024/06/05 09:25
朴素的找最长回文子串的算法要O(n^2) 而用后缀树组就要O(n log n)减少了很多
但是HDU3068特意卡了O(n log n)所以只能用O(n)复杂度的manacher算法写(虽然我是蒟蒻,也不会写后缀数组……)
不太会讲……直接贴代码
<span style="font-size:18px;">#include<cstdio>#include<cstring>#include<iostream>#define min(a,b) ((a)<(b)?(a):(b))#define max(a,b) ((a)>(b)?(a):(b))using namespace std; char s[300000];int p[300000],mx,id,len,ans;int main(){while(scanf("%s",s)!=EOF){mx=0,id=0,ans=0;len=strlen(s);for(int i=len;i>=0;--i){s[i*2+2]=s[i];s[i*2+1]='#';}s[0]='$';len=len*2+1;for(int i=1;i<=len;i++)//核心代码就是这个循环 看上去好像有两个循环嵌套 但实际上是O(n){if(i<mx)p[i]=min(mx-i,p[2*id-i]);else p[i]=1;while(s[i-p[i]]==s[i+p[i]])p[i]++;if(p[i]+i>mx){mx=p[i]+i;id=i;}}for(int i=0;i<=len;i++)ans=max(ans,p[i]);printf("%d\n",ans-1);}return 0;}</span>
0 0
- HDU 3068 manachar(马拉车)算法 求最长回文子串
- Manacher马拉车算法求最长回文子串
- hdu 3068 最长回文(manachar求最长回文子串)
- 最长回文子串-----“马拉车”算法
- mannachar(马拉车)求最长回文子串
- 求字符串的最长回文子串--最直观的“马拉车算法”分析
- hihoCoder 最长回文子串(manacher算法:马拉车)
- 求最大回文子串(马拉车算法)
- 最长回文子串(马拉车)
- hihocoder 1032 最长回文子串(Manachar算法)
- 最长回文 --马拉车算法
- templete_最长回文子串manachar
- HDU 3068 最长回文(求最长回文子串)
- 【LeetCode】Longest Palindromic Substring(最长回文子串1)[马拉车Manacher算法]
- 最长回文串(manachar算法)模板
- hihoCoder-1032 - 最长回文子串(Manacher 马拉车)
- hdu 3068 最长回文(最长回文子串 manacher算法)
- 最长回文字串(马拉车算法)
- java编程思想03
- Ubuntu服务器,由于redis漏洞导致被安装挖矿脚本
- Retrofit2 简述
- CSS4前瞻:选择器(Selectors)
- linux内核设计与实现(三) linux进程管理 之 进程描述—1
- HDU 3068 manachar(马拉车)算法 求最长回文子串
- iOS中异步回调的单元测试方法
- TabHost使用
- java编程思想04
- 阅读的方法
- 史上最全的Java&Android面试题搜集整理
- MFC Radio Button 使用 分组 RadioButton 用法
- Spring中加载配置文件的方式
- resources中的color 设置