You are given a number of case-sensitive strings of alphabetic characters, find the largest string X, such that either X, or its inverse can be found as a substring of any of the given strings.

找出最长的一个子串,所有串中都出现过它或它的逆序

扩展KMP水题

 #include<stdio.h>
#include<string.h>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std; const int maxn=;
int nxt[][maxn],ext[][maxn];
char s[][maxn];
int len[],ans[maxn]; void EKMP(char s[],char t[],int lens,int lent,int c){
int i,j,p,l,k;
nxt[c][]=lent;j=;
while(j+<lent&&t[j]==t[j+])j++;
nxt[c][]=j;
k=;
for(i=;i<lent;i++){
p=nxt[c][k]+k-;
l=nxt[c][i-k];
if(i+l<p+)nxt[c][i]=l;
else{
j=max(,p-i+);
while(i+j<lent&&t[i+j]==t[j])j++;
nxt[c][i]=j;
k=i;
}
} j=;
while(j<lens&&j<lent&&s[j]==t[j])j++;
ext[c][]=j;k=;
for(i=;i<lens;i++){
p=ext[c][k]+k-;
l=nxt[c][i-k];
if(l+i<p+)ext[c][i]=l;
else{
j=max(,p-i+);
while(i+j<lens&&j<lent&&s[i+j]==t[j])j++;
ext[c][i]=j;
k=i;
}
}
} int main(){
int T;
scanf("%d",&T);
while(T--){
memset(ans,0x3f,sizeof(ans));
int n;
scanf("%d",&n);
for(int i=;i<=n;++i)scanf("%s",s[i]);
for(int i=;i<=n;++i)len[i]=strlen(s[i]);
s[][len[]]='#';
for(int i=;i<=len[];++i)s[][len[]+i]=s[][len[]-i];
s[][len[]+len[]+]=;
len[]=strlen(s[]);
int maxx=;
for(int i=;i<len[];++i){
for(int j=;j<=n;++j){
int cnt=;
EKMP(s[j],s[]+i,len[j],len[]-i,j);
for(int k=;k<len[j];++k){
if(ext[j][k]>cnt)cnt=ext[j][k];
}
if(cnt<ans[i])ans[i]=cnt;
}
if(ans[i]>maxx)maxx=ans[i];
}
printf("%d\n",maxx);
}
return ;
}

最新文章

  1. IOS的七种手势
  2. java内存泄漏的经典案例
  3. 廖雪峰Python教程疑问
  4. vs快捷方式
  5. CSS中的浮动和定位
  6. Nginx:Pitfalls and Common Mistakes
  7. Struts2的流程(三)
  8. Git创建 项目
  9. Java中常用的内存区域
  10. smarty安装及例子
  11. 转载:C++ STL set学习
  12. Mysql数据库导入命令Source详解
  13. STM32的GPIO
  14. Redis单机版安装
  15. 【HNOI2011】数学作业
  16. Vue.js-04:第四章 - 页面元素样式的设定
  17. Linux Network Command
  18. 20175202 《Java程序设计》第三周学习总结
  19. SHELL编程之产生随机数
  20. 轻松制作X86 OPENWRT USB启动盘

热门文章

  1. dns未设置 PHP Warning: file_get_contents():php_network_getaddresses: getaddrinfo failed:
  2. illumina phix
  3. LeetCode--104--二叉树的最大深度
  4. android--------Android Studio常见问题以及解决方式
  5. Confluence 6 配置 LDAP 连接池
  6. Confluence 6 连接到一个 LDAP 目录
  7. != 比 &amp; 的优先级高
  8. js打开、关闭页面和运行代码那些事
  9. poj1088 滑雪 解题报告
  10. zoj3888