Codevs_P1425 最长公共子串(KMP)
来源:互联网 发布:js dragobject 编辑:程序博客网 时间:2024/06/05 07:41
题目描述 Description
输入N(2<=N<=20)个字符串,输出最长公共子串。
输入描述 Input Description
输入N
再输入N个字符串
输出描述 Output Description
输出最大公共子串。
样例输入 Sample Input
3
abce
cabk
jaab
样例输出 Sample Output
ab
简单KMP
#include<cstdio>#include<cstring>#include<iostream>using namespace std;#define N 105int t,n,st,ll;bool flag;int l[N],next[N]; //next正序char s[N],c[N][N]; //s正序inline int creat(int fr,int l){ memset(s,0,sizeof(s)); memset(next,0,sizeof(next)); for(int i=fr;i<fr+l;i++){ s[i-fr]=c[st][i]; } int j=0,k=-1;next[0]=-1; while(j<l-1){ if(k==-1||s[j]==s[k]){ ++j,++k;next[j]=k; } else k=next[k]; } return 0;}inline int kmp(int k){ int i=0,j=0; while(i<l[k]&&j<ll){ if(j==-1||c[k][i]==s[j]){ ++j,++i; } else j=next[j]; } if(j==ll) return 1; return 0;}inline bool check(){ for(int i=1;i<=n;i++){ if(i!=st) if(!kmp(i)) return false; } return true;}int main(){ scanf("%d",&n);getchar();st=1;flag=false; memset(c,0,sizeof(c));memset(l,0,sizeof(l)); for(int i=1;i<=n;i++) { scanf("%s",c[i]);l[i]=strlen(c[i]); if(l[st]>l[i]) st=i; } for(ll=l[st];ll>0;ll--){ for(int j=0;j<=l[st]-ll;j++){ creat(j,ll); if(check()) {flag=true;break;} } if(flag) {printf("%s\n",s);break;} } if(!flag) printf("%s\n",s); return 0;}
2 0
- Codevs_P1425 最长公共子串(KMP)
- poj1226 kmp 最长公共子串
- HDU1238 Substrings(kmp,最长公共子串)
- 【KMP多串最长公共子串】POJ 3080
- 【KMP求多个串的最长公共子串】POJ 3450
- POJ 3080 查找公共最长子串 kmp+枚举
- poj 3450 Corporate Identity (KMP+最长公共子串)
- poj 3080 Blue Jeans (KMP+最长公共子串)
- POJ 3080 Blue Jeans(KMP 最长公共子串)
- POJ 3080 Blue Jeans(KMP 最长公共子串)
- poj--3450 KMP求多个字符串的最长公共子串
- POJ3080 Blue Jeans(KMP,求最长公共子串)
- POJ3450 Corporate Identity(kmp,最长公共子串)
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 数据库(SQL)之trigger(触发器)的使用以及视图(view)的基本实现
- 【C++】基础知识—引用和指针引用
- SpringMVC知识一
- web前台工作笔记1
- OC02_方法和继承
- Codevs_P1425 最长公共子串(KMP)
- 宽度优先搜索
- android(20)(从网络抓取html显示在本地,把流转换成String,请求网络,简单的消息处理机制,编码问题)
- oracle 动态语句实现复杂SQL的存储过程分布查询
- python基本 tuple
- Pycharm 安装 , Git 插件安装,django环境配置
- 郭文军讲解“微博”如何与【微商城】进行绑定?
- 铁轨
- DDuilib入门【一】