SPOJ 1812 LCS2 - Longest Common Substring II

这道题目要求在给定的多个字符串中找出最长的公共子串。输入包括最多10行,每行不超过100000个小写字母。输出是公共子串的长度,如果不存在则输出0。解决方案涉及构建SAM(suffix automaton)并使用tmp和mx数组来跟踪匹配信息。
摘要由CSDN通过智能技术生成

http://www.elijahqi.win/archives/2857
题意翻译

题面描述 给定一些字符串,求出它们的最长公共子串 输入格式 输入至多

10

10 行,每行包含不超过

100000

100000 个的小写字母,表示一个字符串 输出格式 一个数,最长公共子串的长度 若不存在最长公共子串,请输出

0

0 。

题目描述

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 a bit harder, for some given strings, find the length of the longest common substring of them.

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

输入输出格式

输入格式:

The input contains at most 10 lines, each line consists of no more than 100000 lowercase letters, representing a string.

输出格式:

The length of the longest common substring. If such string doesn’t exist, print “0” instead.

输入输出样例

输入样例#1: 复制

alsdfkjfjkdsal
fdjskalajfkdsla
aaaajfaaaa
输出样例#1: 复制

2

求多个串的最长公共子串 首先针对第一个串建立sam 设mx[x]表示所有串在这个节点匹配的最长距离是多少 tmp[x]表示当前这个串和第一个串在该节点的最长匹配是多少
因为一次匹配不可能更新所有的tmp值所以我们需要在匹配之后拓扑排序之后 因为父节点肯定是当前节点的后缀所以匹配长

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值