码迷,mamicode.com
首页 > 其他好文 > 详细

求最长公共子串

时间:2018-03-22 12:43:42      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:tput   efault   子串   printf   字母   class   char   head   判断   

poj2774,codevs3160

题目描述 Description

给出两个由小写字母组成的字符串,求它们的最长公共子串的长度。

输入描述 Input Description

读入两个字符串

输出描述 Output Description

输出最长公共子串的长度

样例输入 Sample Input
yeshowmuchiloveyoumydearmotherreallyicannotbelieveit
yeaphowmuchiloveyoumydearmother
样例输出 Sample Output

27

数据范围及提示 Data Size & Hint

单个字符串的长度不超过100000

 

错误代码

1         else{
2             while(now&&!c[now][s2[i]-a])now=f[now],qwq;
3                 if(c[now][s2[i]-a]){
4                 now=c[now][s2[i]-a];len=l[now]+1;if(len>ans)ans=len;
5             }
6         
7         }    

一定要判断now是否跳到了0,否则妥妥地死循环

 1 #include<cstring>
 2 #include<cstdio>
 3 const int N=200005;
 4 #define qwq puts("*")
 5 char s1[N>>1],s2[N>>1];
 6 int pre=1,cnt=1,f[N],l[N],l1,l2,c[N][27],ans;
 7 
 8 inline void ins(int x){
 9     int p=pre,np=++cnt;pre=np;l[np]=l[p]+1;
10     for(;p&&!c[p][x];p=f[p])c[p][x]=np;
11     if(!p)f[np]=1;
12     else{
13         int q=c[p][x];
14         if(l[q]==l[p]+1)f[np]=q;
15         else{
16             int nq=++cnt;
17             memcpy(c[nq],c[q],sizeof(c[q]));
18             f[nq]=f[q];l[nq]=l[p]+1;
19             f[q]=f[np]=nq;
20             for(;c[p][x]==q;p=f[p])c[p][x]=nq;
21         }
22     }    
23 }
24 int main(){
25     scanf("%s%s",s1,s2);
26     l1=strlen(s1);l2=strlen(s2);//printf("%d %d\n",l1,l2);
27     for(int i=0;i<l1;++i)ins(s1[i]-a);
28     int now=1,len=0;
29     for(int i=0;i<l2;++i){
30         if(c[now][s2[i]-a])++len,now=c[now][s2[i]-a];
31         else{
32             while(now&&!c[now][s2[i]-a])now=f[now];
33             if(!now)len=0,now=1;
34             else{
35                 len=l[now]+1;now=c[now][s2[i]-a];
36             }
37         }
38         if(len>ans)ans=len;
39     }
40     printf("%d",ans);
41     return 0;
42 }

 

求最长公共子串

标签:tput   efault   子串   printf   字母   class   char   head   判断   

原文地址:https://www.cnblogs.com/xln1111/p/8622587.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!