hdu 2594 Simpsons’ Hidden Talents(KMP)

来源:互联网 发布:下载淘宝软件并安装 编辑:程序博客网 时间:2024/06/06 02:17

题意:给定两个字符串s1,s2,找出s1的前缀和s2的后缀的公共长度。

思路:合并字符串后求next数组。

#include<iostream>#include<stdio.h>#include<string.h>#include<string>using namespace std;char s1[100010],s2[50005];int _next[100010];void get_next(char a[]){    int i=-1,j=0,len=strlen(a);    _next[0]=-1;    while(j<len)    {        if(i == -1 || a[i] == a[j])_next[++j]=++i;        else i=_next[i];    }    return;}int main(){    while(cin>>s1>>s2)    {        int lena=strlen(s1),lenb=strlen(s2),len=lena+lenb;        strcat(s1,s2);        get_next(s1);        while(_next[len]>lena || _next[len]>lenb)            len=_next[len];        len=_next[len];        for(int i=0; i<len; ++i)            cout<<s1[i];        if(len)            cout<<' ';        cout<<len<<endl;    }    return 0;}

0 0
原创粉丝点击