博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求最长公共子串
阅读量:5046 次
发布时间:2019-06-12

本文共 1438 字,大约阅读时间需要 4 分钟。

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
2 #include
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
ans)ans=len;39 }40 printf("%d",ans);41 return 0;42 }

 

转载于:https://www.cnblogs.com/xln1111/p/8622587.html

你可能感兴趣的文章
Android 对话框(Dialog)大全 建立你自己的对话框
查看>>
团队-象棋游戏-模块测试过程
查看>>
团队转会人员情况
查看>>
手势识别(点按,长按,轻扫)
查看>>
json数据结构和gson的比较
查看>>
BZOJ2654: tree
查看>>
【c# 学习笔记】继承
查看>>
Openstack neutron:SDN现状
查看>>
python 打印对象的所有属性值的方法
查看>>
HDU 1160 FatMouse's Speed (最长有序的上升子序列)
查看>>
[数字图像处理]常见噪声的分类与Matlab实现
查看>>
开发指南专题六:JEECG微云高速开发平台代码生成
查看>>
Linux - 设置SFTP服务用户目录权限
查看>>
Ctrl+Tab
查看>>
JAVA设计模式之【工厂方法模式】
查看>>
[No000034]知乎-长期接收碎片化知识有什么弊端?
查看>>
SVG_资料_坐标转换
查看>>
Windows单机配置Zookeeper环境
查看>>
[CentOS]yum安装postgres和ntfs-3g
查看>>
PHP ob_clean 清空先前输出
查看>>