#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 200005
using namespace std;
int buf1[N],buf2[N],sa[N],rnk[N],buc[N],n,height[N],ans,belong[N];
char s[N];
void suffix_sort()
{
int *x=buf1,*y=buf2,m=;
for (int i=;i<m;i++) buc[i]=;
for (int i=;i<=n;i++) buc[x[i]=s[i]]++;
for (int i=;i<=m;i++) buc[i]+=buc[i-];
for (int i=n;i;i--) sa[buc[x[i]]--]=i;
for (int k=;k<=n;k<<=)
{
int p=;
for (int i=n-k+;i<=n;i++)
y[++p]=i;
for (int i=;i<=n;i++)
if (sa[i]>k) y[++p]=sa[i]-k;
for (int i=;i<=m;i++) buc[i]=;
for (int i=;i<=n;i++) buc[x[y[i]]]++;
for (int i=;i<=m;i++) buc[i]+=buc[i-];
for (int i=n;i;i--) sa[buc[x[y[i]]]--]=y[i];
swap(x,y),x[sa[]]=p=;
for (int i=;i<=n;i++)
if (y[sa[i-]]==y[sa[i]] && y[sa[i-]+k]== y[sa[i]+k])
x[sa[i]]=p;
else x[sa[i]]=++p;
if ((m=p)>=n) break;
}
for (int i=;i<=n;i++)
rnk[sa[i]]=i;
for (int i=,j,k=;i<=n;i++)
{
if (rnk[i]==) continue;
if (k) k--;
j=sa[rnk[i]-];
while (s[i+k]==s[j+k] && i+k<=n && j+k<=n) k++;
height[rnk[i]]=k;
}
}
int main()
{
scanf("%s",s+);
n=strlen(s+);
for (int i=;i<=n;i++)
belong[i]=;
s[n+]='#';
scanf("%s",s+n+);
n=strlen(s+);
for (int i=;i<=n;i++)
if (--belong[i]==-) belong[i]=;
suffix_sort();
for (int i=;i<=n;i++)
if (belong[sa[i]]!=belong[sa[i-]]) ans=max(ans,height[i]);
printf("%d\n",ans);
return ;
}

POJ 2774 求两个串的最长公共前缀 | 后缀数组的更多相关文章

  1. SPOJ 1811 Longest Common Substring(求两个串的最长公共子串 || 或者n个串)

    http://www.spoj.com/problems/LCS/ 题目:求两个串的最长公共子串 参考:https://www.cnblogs.com/autoint/p/10345276.html: ...

  2. hdoj 2594 Simpsons’ Hidden Talents 【KMP】【求串的最长公共前缀后缀】

    Simpsons' Hidden Talents Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java ...

  3. SPOJ 1811 Longest Common Substring (后缀自动机第一题,求两个串的最长公共子串)

    题目大意: 给出两个长度小于等于25W的字符串,求它们的最长公共子串. 题目链接:http://www.spoj.com/problems/LCS/ 算法讨论: 二分+哈希, 后缀数组, 后缀自动机. ...

  4. poj 2774 最长公共子串 后缀数组

    Long Long Message Time Limit: 4000MS   Memory Limit: 131072K Total Submissions: 25752   Accepted: 10 ...

  5. POJ 2774 Long Long Message [ 最长公共子串 后缀数组]

    题目:http://poj.org/problem?id=2774 Long Long Message Time Limit: 4000MS   Memory Limit: 131072K Total ...

  6. 求两个字符串的最长公共子串——Java实现

    要求:求两个字符串的最长公共子串,如“abcdefg”和“adefgwgeweg”的最长公共子串为“defg”(子串必须是连续的) public class Main03{ // 求解两个字符号的最长 ...

  7. [URAL-1517][求两个字符串的最长公共子串]

    Freedom of Choice URAL - 1517 Background Before Albanian people could bear with the freedom of speec ...

  8. SAM求多个串的最长公共子串

    又学到一个\(SAM\)的新套路QvQ 思路 考虑用其中的一个串建个\(SAM\),然后用其他的串在上面匹配,匹配时更新答案 首先有一个全局变量\(len\),表示当前已匹配的长度.假设目前在点\(u ...

  9. 求两个字符串的最长公共子串(LCS)

    http://tianyunpu2008.blog.163.com/blog/static/6559379920089162236915/

随机推荐

  1. hive和关系型数据库

    1)hive和关系型数据库存储文件的系统不同.  hive使用hdfs(hadoop的分布式文件系统),关系型数据库则是服务器本地的文件系统: 2)hive使用的计算模型是mapreduce,而关系型 ...

  2. 下载Web微信视频

    1. 用浏览器(我用Chrome)登录web微信(wx.qq.com) 2. 这个时候如果有人发视频,可以点开播放.用F12打开chrome的调试平台,查看视频源的URL(绿色框的src内容) 3. ...

  3. linux 安装 node.js

    wget http://nodejs.org/dist/v0.10.26/node-v0.10.26.tar.gztar zxvf node-v0.10.26.tar.gzcd node-v0.10. ...

  4. Qt 报错onecoreuap\inetcore\urlmon\zones\zoneidentifier.cxx(359)\urlmon.dll!00007FF9D9FA5B50:

    具体报错内容 onecoreuap\inetcore\urlmon\zones\zoneidentifier.cxx(359)\urlmon.dll!00007FF9D9FA5B50: (caller ...

  5. IntelliJ IDEA 新建项目

    一 新建一个Java项目 二 新建一个Web项目 三 新建一个Maven项目 四 web.xml常见版本 <?xml version="1.0" encoding=" ...

  6. Java开发工程师(Web方向) - 04.Spring框架 - 第3章.AOP技术

    第3章--AOP技术 Spring框架 - AOP概述 笔记https://my.oschina.net/hava/blog/758873Spring框架 - AOP使用 笔记https://my.o ...

  7. 博客美化—添加萌萌的live2D看板娘(不能再简单了)

    看着很多博客都有live2D的萌萌哒看板娘,我闲着有空说干就干. 从参考博客的附件中下载资源文件 waifu.css waifu-tips.js live2d.js flat-ui.min.css// ...

  8. TCP/IP协议的学习笔记

    1.OSI和TCP/IP的协议体系结构 OSI是开放系统互连参考模型,它的七层体系结构概念清楚,理论也比较完整,但它既复杂又不实用.而TCP/IP是一个四层的体系结构,它包含应用层.传输层.网际层和网 ...

  9. SGU 176 Flow construction(有源汇上下界最小流)

    Description 176. Flow construction time limit per test: 1 sec. memory limit per test: 4096 KB input: ...

  10. matlab 直方图均衡化(含rgb)

    步骤: 统计原图像素每个像素的个数 统计原图像<每个灰度级的像素的累积个数 家里灰度级得映射规则 将原图每个像素点的灰度映射到新图 代码: clear all I=imread('1.jpg') ...