Simpsons’ Hidden Talents (KMP)

来源:互联网 发布:mac word 繁简转换 编辑:程序博客网 时间:2024/06/03 22:54

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

题意:求出最长的串长度,该串既是s1的前缀又是s2的后缀.

思路:把两个字符串连起来求一下前缀数组next[]即可~当然要用”#”或者其他非小写字母连接起来防止两个字符串真的混起来,比如s1=”a”,s2=”aaaa”这种情况。

代码出处
#include<iostream>#include<string.h>#include<stdio.h>using namespace std;const int MAXN = 100011;int next[MAXN],Min;char s[MAXN],t[MAXN/2];void makenext(){    int M = strlen(s),i=0,j=-1;next[0]=-1;    while(i<M){        if(j==-1||s[i]==s[j])next[++i]=++j;        else j = next[j];    }}void solve(){    int i = strlen(s);    i = next[i-1];    s[i] = 0;    if(i!=0)    printf("%s %d\n",s,i);    else    printf("%d\n",i);}int main(){    while(scanf("%s%s",s,t)!=EOF){       int l;       l=strlen(s);       s[l]='A';s[l+1]=0;       l=strlen(t);       t[l]='B';t[l+1]=0;        strcat(s,t);        makenext();        solve();    }    return 0;}

原创粉丝点击