题目大意

给定n个字符串,字符串可逆序可顺序,求它们的最长公共子串

题解

在输入的过程中记录一下最短的那个字符串,然后枚举起点,然后进行二分求出子串末位置,然后再验证是否是公共子串,记录最长的公共子串就是最终答案~~~~时间复杂度为O(N^3*logn)

代码:

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
#define MAXN 105
#define INF 0x3f3f3f3f
char T[MAXN][MAXN];
int f[MAXN];
void getfail(char *p,int len)
{
int j;
f[]=j=-;
for(int i=;i<len;i++)
{
while(j>=&&p[j+]!=p[i]) j=f[j];
if(p[j+]==p[i])j++;
f[i]=j;
}
}
bool find(char *s,int len,int n)
{
getfail(s,len);
for(int i=;i<n;i++)
{
int j=-,lt=strlen(T[i]);
bool flag1=false,flag2=false;
for(int t=;t<lt;t++)
{
while(j>=&&s[j+]!=T[i][t]) j=f[j];
if(s[j+]==T[i][t]) j++;
if(j+==len)
{
flag1=true;
break;
}
}
char ss[MAXN];
strcpy(ss,T[i]);
reverse(ss,ss+lt);
j=-;
for(int t=;t<lt;t++)
{
while(j>=&&s[j+]!=ss[t]) j=f[j];
if(s[j+]==ss[t]) j++;
if(j+==len)
{
flag2=true;
break;
}
}
if(!flag1&&!flag2) return false;
}
return true; }
int main()
{
int cases;
scanf("%d",&cases);
while(cases--)
{
int n,maxlen=-INF,len=INF;
char s[MAXN];
scanf("%d",&n);
for(int i=;i<n;i++)
{
scanf("%s",T[i]);
if(len>strlen(T[i]))
{
len=strlen(T[i]);
strcpy(s,T[i]);
}
}
for(int i=;i<len;i++)
{
int l=i,r=len-,lens=-INF;
while(l<=r)
{
int mid=(l+r)>>;
bool flag=find(s+i,mid-i+,n);
if(flag)
{
l=mid+;
lens=mid-i+;
}
else
r=mid-;
if(lens!=-INF&&lens>maxlen) maxlen=lens;
}
}
if(maxlen!=-INF)
printf("%d\n",maxlen);
else
{
printf("0\n");
}
}
return ;
}

POJ1226 - Substrings(KMP+二分)的更多相关文章

  1. POJ1226 Substrings(二分+后缀数组)

    题意:给n个字符串,求最长的子串,满足它或它的逆置出现在所有的n个字符串中. 把n个字符串及其它们的逆置拼接,中间用不同字符隔开,并记录suffix(i)是属于哪个字符串的: 跑后缀数组计算heigh ...

  2. POJ1226 Substrings ——后缀数组 or 暴力+strstr()函数 最长公共子串

    题目链接:https://vjudge.net/problem/POJ-1226 Substrings Time Limit: 1000MS   Memory Limit: 10000K Total ...

  3. 【bzoj3796】Mushroom追妹纸 Kmp+二分+Hash

    题目描述 给出字符串s1.s2.s3,找出一个字符串w,满足: 1.w是s1的子串: 2.w是s2的子串: 3.s3不是w的子串. 4.w的长度应尽可能大 求w的最大长度. 输入 输入有三行,第一行为 ...

  4. 【bzoj3796】Mushroom追妹纸 hash/sa+kmp+二分

    Description Mushroom最近看上了一个漂亮妹纸.他选择一种非常经典的手段来表达自己的心意--写情书.考虑到自己的表达能力,Mushroom决定不手写情书.他从网上找到了两篇极佳的情书, ...

  5. HDU4763-Theme Section(KMP+二分)

    Theme Section Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  6. POJ1226:Substrings(后缀数组)

    Description You are given a number of case-sensitive strings of alphabetic characters, find the larg ...

  7. POJ3080 - Blue Jeans(KMP+二分)

    题目大意 求N个字符串的最长公共字串 题解 和POJ1226做法一样...注意是字典序最小的...WA了一次 代码: #include <iostream> #include <cs ...

  8. hdu 1238 Substrings(kmp+暴力枚举)

    Problem Description You are given a number of case-sensitive strings of alphabetic characters, find ...

  9. Substrings kmp

    Problem Description You are given a number of case-sensitive strings of alphabetic characters, find ...

随机推荐

  1. hdu 5652 India and China Origins 并查集+逆序

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5652 题意:一张n*m个格子的点,0表示可走,1表示堵塞.每个节点都是四方向走.开始输入初始状态方格, ...

  2. Java单实例的最佳写法

    前言:代码简洁与性能高效无法两全其美,本文章专注于大并发程序的性能,如果您追求代码简洁,本文章可能不太适合,因为本文章主要讨论如何写出在高并发下也能运行很好的代码. 并文章属于Java并发编程实战中例 ...

  3. 标准初始化css样式表

    body { font-size:12px; line-height:1.3; font-family:'微软雅黑', Tahoma,Helvetica,Arial,'宋体', sans-serif; ...

  4. HTML5&CSS3&JavaScript&PHP&MySQL学习笔记

    1.在文字间添加一条水平线  使用<hr />  注意该符号不是成对出现的 2.<q> </q>用来标记于段落中的较短引用,浏览器会在它之间的语句两端加上双引号. ...

  5. 移动js

    http://blog.sina.com.cn/s/blog_6553196001015672.html http://blog.sina.com.cn/s/blog_6553196001014vjb ...

  6. Javascript与C#相互调用

    javascript调用C#代码 前台js调用后台代码方法,此方法只适用于后台方法的修饰符为public或protected,如果是其他修饰符会报错. >后台C#代码: protected in ...

  7. 使用flask的时候遇到的问题及其解答

    在网上看到了mircoblog的这个web程序,用flask框架写的,自己就在windows的环境下实现了下. 1.这个博客系统用到了一个flask插件叫flask_Login 里面涉及到编码解码的问 ...

  8. android gridview按钮边框和定制点击颜色

    <?xml version="1.0" encoding="utf-8"?> <GridView xmlns:android="ht ...

  9. 服务器部署_nginx的host not found in upstream "tomcat_www.bojinne" 错误解决办法

    今天修改了nginx.conf之后,nginx-t报错. 1. 网上多认为此错误需要修改/etc/hosts,添加该域名对应的ip 2. 我自己的解决方案是仔细核对 upstream 后面的字符 和  ...

  10. 服务器部署_linuix下 一台nginx 多域名

    近日朋友要我帮他调服务器, 一. 初步需求如下: 1. 一台服务器下要放三个应用,对应三个域名:www.aaa.com,www.bbb.com,www.ccc.com. 2. 其中后两个应用也要可以用 ...