最长回文子串
来源:互联网 发布:网络推广文案案例 编辑:程序博客网 时间:2024/05/16 16:31
测试:HDU-3068
讲解:Manacher
Manacher算法可以在
思想还是比较简单的,难在复杂度的证明上,似乎也找不到比较好的证明。
不过根据随机样例测试发现for内的while循环执行次数在 n 左右。
#include<bits/stdc++.h>using namespace std;const int N=110007;int p[N*2];int totalAccess;int Manacher(const string & s){ int res=0; int id; int mx=0; for(int i=0;i<s.length();i++) { if(i<mx) p[i]=min(p[id*2-i],mx-i+1); else p[i]=1; while(i-p[i]>=0&&i+p[i]<s.length()&&s[i-p[i]]==s[i+p[i]]) ++p[i],++totalAccess; if(mx<i+p[i]-1) { id=i; mx=i+p[i]-1; } res=max(res,p[i]-1); } return res;}int main(){ //freopen("in.txt","r",stdin); ios::sync_with_stdio(false); string s; while(cin>>s) { totalAccess=0; string t; t.push_back('#'); for(int i=0;i<s.length();i++) { t.push_back(s[i]); t.push_back('#'); } cout << Manacher(t) << endl; //clog << totalAccess << endl; } return 0;}
阅读全文
0 0
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- POJ 1650 Integer Approximation 笔记
- Android引用资源(resources) vs 引用样式属性(style attribute)语法
- Web站点如何防范XSS、CSRF、SQL注入攻击
- 堆栈-中缀表达式求值-分析并附完整源代码
- css中的浮动清除
- 最长回文子串
- 大学是天堂? 当代大学生成绩分析
- 多进程 多线程 异步 爬虫(2)
- include
- 欢迎使用CSDN-markdown编辑器
- 类加载器(classLoader)
- 20170529
- java面试小结
- 当json中的key值为数字时,怎么用GSON解析?