HDU 2594 Simpsons’ Hidden Talents (KMP的F数组应用)
来源:互联网 发布:什么软件图片好看 编辑:程序博客网 时间:2024/05/22 02:56
KMP中f数组意义:对于模式串的前i个字母构成的子串,这个子串会有一些前缀和后缀完全相同(包括长度),f[i]表示的就是这个最大的长度,而长度确定了前缀后缀就确定了。
对于这个题,如果将s1,s2连接成一个串c,c的长度为lc,那么f[lc]就是题目中要求的最大长度。
注意如果f[lc]大于la或lb,那么要修改成la和lb中的最小值lmin,至于为什么一定存在长度为lmin的相同前后缀,这个自己画一下图就知道了,思想就是对于后缀中的一部分对应着前缀中的一部分,而这部分在后缀中又对应前缀中的一部分,这样传递下去。
代码:
#include <iostream>#include <cstdio>#include <cstring>using namespace std;char a[50005];char b[50005];char c[100005];int f[100005];int main(){ while(~scanf("%s%s",a,b)){ int la=strlen(a); int lb=strlen(b); strcpy(c,a); strcat(c,b); int lc=strlen(c); f[0]=f[1]=0; for(int i=1;i<lc;i++){ int j=f[i]; while(j&&c[i]!=c[j]) j=f[j]; f[i+1]=(c[i]==c[j]?j+1:0); } int res=f[lc]; res=min(res,la); res=min(res,lb); if(res){ for(int i=0;i<res;i++){ printf("%c",c[i]); } printf(" %d\n",res); } else printf("%d\n",res); } return 0;}
0 0
- HDU 2594 Simpsons’ Hidden Talents (KMP的F数组应用)
- HDU 2594 Simpsons’ Hidden Talents KMP的next数组应用
- HDU 2594 Simpsons’ Hidden Talents(KMP,next数组的应用)
- HDU 2594 Simpsons’ Hidden Talents(KMP的Next数组应用)
- HDU 2594 Simpsons’ Hidden Talents(KMP)
- hdu 2594 Simpsons’ Hidden Talents(KMP)
- HDU 2594 Simpsons’ Hidden Talents (KMP)
- HDU 2594 Simpsons’ Hidden Talents(kmp)
- HDU 2594 Simpsons' Hidden Talents(kmp)
- HDU 2594 Simpsons’ Hidden Talents (kmp)
- HDU 2594 Simpsons’ Hidden Talents(KMP)
- HDU 2594 Simpsons’Hidden Talents(KMP)
- hdu 2594 Simpsons’ Hidden Talents(KMP)
- HDU 2594 Simpsons’ Hidden Talents (kmp)
- HDU 2594 Simpsons’ Hidden Talents(kmp)
- HDU-2594 Simpsons’ Hidden Talents(KMP)
- 【hdu 2594】Simpsons’ Hidden Talents(kmp)
- hdu 2594 Simpsons' Hidden Talents(KMP)
- Html学习笔记2
- OC语法之KVC与KVO
- HttpSessionListener, HttpSessionAttributeListener的用法及简单实例
- Tomcat 启动错误!
- Ubuntu 12.04 LTS 中文输入法的安装
- HDU 2594 Simpsons’ Hidden Talents (KMP的F数组应用)
- 计数排序、基数排序、桶排序
- Android4.4 Launcher3分析之IconCache
- C#基于Socket的简单聊天室实践
- shell脚本一键安装solr4.10.0
- ELK
- Step into Kotlin - 15 - 注解
- eclipse link方式安装插件
- ART学习笔记 Rosalloc alloc部分