博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SPOJ 1811 Longest Common Substring
阅读量:5330 次
发布时间:2019-06-14

本文共 2054 字,大约阅读时间需要 6 分钟。

A string is finite sequence of characters over a non-empty finite set Σ.

In this problem, Σ is the set of lowercase letters.

Substring, also called factor, is a consecutive sequence of characters occurrences at least once in a string.

Now your task is simple, for two given strings, find the length of the longest common substring of them.

Here common substring means a substring of two or more strings.

Input

The input contains exactly two lines, each line consists of no more than 250000 lowercase letters, representing a string.

Output

The length of the longest common substring. If such string doesn't exist, print "0" instead.

Example

Input:alsdfkjfjkdsalfdjskalajfkdslaOutput:3 题解: 哈哈很意外啊,在电脑城随便找台机子用洛谷在线IDE 1A这题啊 讲讲思路: 以A建立SAM 让B在SAM上匹配 可以类比于kmp思想,我们知道在Parent树上,fa是当前节点的子集,也就是说满足最大前缀,利用这个就可以做题了 步骤如下: 1.如果满足ch[p][c]存在,那么就直接走就是了,和AC自动机类似,len++ 2.如果不存在,那么就沿fa上跳,找到最大dis[fa]且满足存在c这个儿子的.类似于跳fail链 3.跳到根就直接初始化,重新开始
1 #include 
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 const int N=550005; 8 char S[N];int n=0,cnt=1,cur=1,last=1,ch[N][26],fa[N],dis[N]; 9 void build(int c){10 last=cur;cur=++cnt;dis[cur]=++n;11 int p=last;12 for(;p && !ch[p][c];p=fa[p])ch[p][c]=cur;13 if(!p)fa[cur]=1;14 else{15 int q=ch[p][c];16 if(dis[q]==dis[p]+1)fa[cur]=q;17 else{18 int nt=++cnt;dis[nt]=dis[p]+1;19 memcpy(ch[nt],ch[q],sizeof(ch[q]));20 fa[nt]=fa[q];fa[q]=fa[cur]=nt;21 for(;ch[p][c]==q;p=fa[p])ch[p][c]=nt;22 }23 }24 }25 int ans=0;26 void Flr()27 {28 int p=1,nxt,lt;29 scanf("%s",S);30 int l=strlen(S),len=0,c;31 for(int i=0;i
lt)lt=dis[p],nxt=p;40 p=fa[p];41 }42 if(nxt)43 p=ch[nxt][c],len=dis[nxt]+1;44 else45 p=1,len=0;46 }47 if(len>ans)ans=len;48 }49 printf("%d\n",ans);50 }51 void work()52 {53 scanf("%s",S);54 for(int i=0,l=strlen(S);i
 

 

 

转载于:https://www.cnblogs.com/Yuzao/p/7273413.html

你可能感兴趣的文章
套接口和I/O通信
查看>>
阿里巴巴面试之利用两个int值实现读写锁
查看>>
浅谈性能测试
查看>>
Winform 菜单和工具栏控件
查看>>
CDH版本大数据集群下搭建的Hue详细启动步骤(图文详解)
查看>>
巧用Win+R
查看>>
浅析原生js模仿addclass和removeclass
查看>>
Python中的greenlet包实现并发编程的入门教程
查看>>
java中遍历属性字段及值(常见方法)
查看>>
深入理解jQuery框架-框架结构
查看>>
YUI3自动加载树实现
查看>>
python知识思维导图
查看>>
当心JavaScript奇葩的逗号表达式
查看>>
App Store最新审核指南(2015年3月更新版)
查看>>
织梦MIP文章内容页图片适配百度MIP规范
查看>>
[Kali_BT]通过低版本SerialPort蓝牙渗透功能手机
查看>>
C语言学习总结(三) 复杂类型
查看>>
HNOI2018
查看>>
【理财】关于理财的网站
查看>>
Ubunt中文乱码
查看>>