hdu_1403_SAM_求最小公共前缀
来源:互联网 发布:淘宝卖家免费装修模板 编辑:程序博客网 时间:2024/05/20 10:54
题目: click here
就是求最小公共前缀
#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>using namespace std;const int MAX_NODES = 3555555;const int N = 1111111;struct node{struct node *ch[26];struct node *f;int mx;void init(){memset(ch,0,sizeof(ch));f = 0;}}*root,*cnt,*tail,pool[MAX_NODES];char s[N],ts[N];int n;void insert(int c,int len){node *p = tail, *np = cnt++;for( ; p && !p->ch[c] ; p = p->f) p->ch[c] = np;np->mx = len;tail = np;if(!p) np->f = root;else if( p->ch[c]->mx == p->mx+1) np->f = p->ch[c];else{node *q = p->ch[c], *r = cnt++;*r = *q;r->mx = p->mx+1;q->f = np->f = r;for( ; p && p->ch[c] == q ; p = p->f) p->ch[c] = r; }}void init_suffix_auto(char s[]){int len = 0;tail = cnt = root = pool; cnt++ , root->init();for(int i = 0;i < (n<<1) ;i++)pool[i].init();for( ; s[len] ; len++){insert(s[len] - 'a', len+1);}}int main(){int t;while(scanf("%s",s)!=EOF){scanf("%s",ts);n = strlen(s);init_suffix_auto(s);node *p=root;int ans = 0,tmp=0;for(int i = 0; ts[i]; i++){int id = ts[i]-'a';if(p->ch[id]){p = p->ch[id];tmp++;}else{for(; p && !p->ch[id]; p = p->f) ;if(!p){p = root;tmp = 0;}else{tmp = p->mx+1;p = p->ch[id];}}ans = max(tmp,ans);}printf("%d\n",ans);}return 0;}
0 0
- hdu_1403_SAM_求最小公共前缀
- sed中求公共前缀
- hdu1403 求最长公共前缀 后缀数组
- hdu4691(后缀数组求最长公共前缀)
- LeetCode -- 求字符串数组中的最长公共前缀
- longest-common-prefix 求字符串数组的最长公共前缀
- leetcode 求字符串数组的最大公共前缀
- poj 2774求两个串的公共前缀 后缀数组
- leetcode-14-求字符串数组最长公共前缀
- 利用后缀数组 前缀 LCP最长公共前缀求第K大的子串
- UVALive 3026 Period ( kmp 求前缀最小循环节)
- 求二叉树中两结点的最小公共祖先
- 求二叉树中两结点的最小公共祖先
- 求二叉树的最小公共父节点
- 最长公共前缀
- 最长公共前缀
- LintCode-最长公共前缀
- LintCode 最长公共前缀
- java web学习基础(一)
- poj 3438:Balanced Lineup
- [Java] 在 eclipse 下使用 maven 的小菜记录
- Windows 自旋锁分析(一)
- Linux shell 脚本攻略shell代码(小试牛刀)
- hdu_1403_SAM_求最小公共前缀
- 全面解析信号量
- C++向上类型转换和向下类型转换
- 三角剖分
- 自定义类型命名中_s,_t后缀的解释
- Windows 自旋锁分析(二)
- 《python源码剖析》笔记 python虚拟机中的函数机制
- UVa_299 - Train Swapping
- kaggle : StumbleUpon Evergreen Classification Challenge