hdu2594 Simpsons’ Hidden Talents kmp next函数的运用

来源:互联网 发布:数据港千股千评 编辑:程序博客网 时间:2024/05/16 03:24

http://acm.hdu.edu.cn/showproblem.php?pid=2594

题意:给你两个数组,让你求以第一数组前缀 和第二个数组的后缀的最长公共部分。

其实就是对于next函数的使用,先把两个字符串合成一个,然后因为是公共部分,所以next【len】也应该小于第一个和第二个字符串最小长度。

#include<iostream>#include<stdio.h>#include<string.h>using namespace std;char st[1000005],sa[50005];int next[1000005];void getnext(char *p){int i,j;i=0;j=-1;next[i]=-1;int len=strlen(p);while(i<len){if(j==-1||p[i]==p[j]){i++;j++;next[i]=j;}elsej=next[j];}}int main(){int n,i,j;int len,len1,len2;while(scanf("%s %s",&st,&sa)!=EOF){len1=strlen(st);len2=strlen(sa);strcat(st,sa);getnext(st);len=strlen(st);int ans=next[len];while(ans>len1||ans>len2){ans=next[ans];}if(ans!=0){for(i=0;i<ans;i++)printf("%c",st[i]);printf(" %d\n",ans);}elseprintf("%d\n",ans);}}


0 0
原创粉丝点击