URAL 1297 Palindrome(最长回文子串 )
来源:互联网 发布:拉格朗日插值算法程序 编辑:程序博客网 时间:2024/05/22 12:08
这个题目现在是用manacher线性算法写的,后缀数组版本的还没实现,打算过两天搞定
还是觉得这个算发搞定回文问题既好写又快
pos*2-i这个就是求i位置关于pos的一个对称点,本质上是这样的 pos-(i-pos);
i-pos是i相对pos偏右的距离
#include <iostream>#include <string.h>#include <stdio.h>using namespace std;#define MIN(a,b) (a<b?a:b)char str[2500];char rec[2500];int drome[2500];int main(){ int i,j,k; int max_pos,pos; while(scanf("%s",rec)!=EOF) { k=0; str[k++]='@'; for(i=0;rec[i];i++) { str[k++]='#'; str[k++]=rec[i]; } str[k++]='#'; str[k]=0; drome[0]=1; max_pos=0; pos=0; for(i=1;str[i];i++) { if(max_pos > i) { drome[i]=MIN(drome[pos*2-i],max_pos-i); } else drome[i]=1; for( ;str[i+drome[i]]==str[i-drome[i]];drome[i]++) ; if(i+drome[i] > max_pos) pos=i,max_pos=drome[i]+i; } max_pos=-1; pos=0; for(j=0;j<i;j++) { if(drome[j] > max_pos) { max_pos=drome[j]; pos=j; } } // printf("MAX:%d\n",max_pos); max_pos; k=pos-max_pos+1; pos+=max_pos-1; for(k;k<pos;k++) if(str[k]!='#') printf("%c",str[k]); printf("\n"); } return 0;}
- URAL 1297 Palindrome(最长回文子串 )
- URAL 1297 Palindrome(SA 求最长回文子串)
- URAL 1297 Palindrome(最长回文子串:后缀数组)
- ural 1297 Palindrome ( 后缀数组 最长回文子串 )
- URAL - 1297 Palindrome(后缀数组求最长回文子串)
- URAL 1297 Palindrome (最长回文子串)
- ural 1297 Palindrome(最长回文子串)
- 【后缀数组|最长回文子串】URAL-1297 Palindrome
- URAL 1297 Palindrome【后缀数组】求最长回文子串
- 【Ural 1297】Palindrome manacher 最长回文子串
- ural 1297. Palindrome后缀数组求最长回文子串
- ural 1297 Palindrome求最长连续回文子串(后缀数组求法)
- 【URAL】1297 Palindrome 【后缀数组+RMQ——求最长回文子串】
- URAL 1297 Palindrome 后缀数组 或 Manacher 求最长回文子串
- ural 1297 最长回文子串
- UVAL 1297 Palindrome 最长回文子串
- URAL 1297(Palindrome,后缀数组)最长回文串
- ural 1297Palindrome(求最长回文)
- openstack-cinder_lvm_driver命令汇总
- iOS开发 frame 与 bounds 的区别与关系
- WinCE6.0+S3C6410 USB驱动架构分析
- spoj 247
- OC学习之UIKit的类层次结构图
- URAL 1297 Palindrome(最长回文子串 )
- Android
- 正则表达式30分钟入门教程
- 函数重载的简单示例
- hdu 4627 (多校联赛第3场1008)
- 30岁之前做好10件事
- OC学习之UIToolbar
- 兄弟郊游问题
- 流程控制