字符串 manacher 最长回文子串
来源:互联网 发布:google 财务分析软件 编辑:程序博客网 时间:2024/04/30 14:49
学习一下:
这个感觉好理解一些→戳这里
这个代码比较好→戳这里
题目:hdu3068
最终id 的值为 找到的最大回文的中间值(扩展后的坐标,即 还没 除2)
maxlen-1为 最大回文长度
1.如果要求,回文长度最长,且下标最后?那就是下面的代码
2.如果要求,回文长度最长,且要首次出现的?那就把串预处理,倒转一下 函数: reverse( str.begin(),str.end() );
3.如果要求,回文长度最长,输出最长回文? 知道中间值和长度,返回到原来的数组中,就可以输出。
4.如果要求,回文长度最长,输出最长回文,且首字母最小? 做个标记。在替换最大值时,比较首字母,并记录id
#include <iostream>#include <cstdio>#include <algorithm>#include <math.h>#include <cstring>using namespace std;const int maxn=110010;char str[maxn*2];int p[maxn*2];int main(){while(~scanf("%s",str)){int len=strlen(str);int id=0,maxlen=0;for(int i=len;i>=0;--i){str[i+i+2]=str[i];str[i+i+1]='#';}str[0]='*';memset(p,0,sizeof(p));for(int i=2;i<2*len+1;++i){if(p[id]+id>i)p[i]=min(p[2*id-i],p[id]+id-i);else p[i]=1;//向左右展开匹配 while(str[i-p[i]] == str[i+p[i]])++p[i];if(id+p[id]<i+p[i])id=i;//最大长度存入maxlen if(maxlen<p[i])maxlen=p[i];}printf("%d\n",maxlen-1);}return 0;}
0 0
- 字符串 manacher 最长回文子串
- 最长回文子串 Manacher
- 最长回文子串【Manacher】
- Manacher最长回文子串
- Manacher----最长回文子串
- Manacher 最长回文子串
- 【Manacher】最长回文子串
- Manacher 最长回文子串
- 字符串之最长回文子串 manacher算法
- Manacher算法求字符串的最长回文子串
- 【字符串处理】最长回文子串笔记(Manacher算法)
- 最长回文字符串Manacher
- Manacher算法求最长回文子串
- Manacher算法求最长回文子串
- 最长回文子串(Manacher算法)
- manacher求最长回文子串
- Manacher算法 最长回文子串
- 最长回文子串的manacher算法
- beyond compare 对class文件反编译及比较
- 摧毁一个学生有多简单?
- svn commit 时提示 Commit failed (details follow) Unable to create pristine install stream 系统找不到指定的路径
- win10+64位+python3.4安装scrapy
- Mockplus演示和分享原型设计的8种方式
- 字符串 manacher 最长回文子串
- listview自带的单选和多选
- js实现简单的日历
- 如何解决transformClassesWithDexForDebug
- 安卓小日记练习(10)listview之item的动态改变
- 1-100求和
- Medium 34题 Search for a Range
- HDU 1402 FFT模板题,求大数乘法
- android hook 框架 libinject2 简介、编译、运行