链接
\(\text{POJ - 3080 Blue Jeans}\)
题意
给你\(m\)个长度为60字符串,求它们的最长公共子串,如果有多个最长公共子串,输出字典序最小的,如果不存在或者最长公共子串的长度小于3则输出no significant commonalities
;
数据范围:共\(n\)组测试样例,每组一个\(m\),\(2\leq m\leq 10\).
分析
由于数据范围比较小,我们可以\(kmp+\)暴力,假如\(m\)个串的集合为\(s\),那么我们枚举\(s[0]\)的所有长度\(\geq\) 3的所有子串,那么答案存在,必为其中的某一个,我们枚举这些子串,看对于一个子串是否能够同时和\(s[1\dots m]\)进行匹配成功,我们可以将得到的\(s\)集合排个序,使得我们找到一个可以与\(s[1\dots m]\)所有串匹配的子串,就可以直接输出它;
这里我用的java,对于s集合中串的排序,c++里的我们可以写一个compare函数作为sort函数的第三个参数,对于java是有点类似的,见代码。
代码
1 | import java.io.*; |