HDU(1867)A + B for you again (KMP)

来源:互联网 发布:淘宝店招设计素材 编辑:程序博客网 时间:2024/05/16 14:21
#include <iostream>#include <stdio.h>#include <string>#include <string.h>#include <algorithm>#include <math.h>#include <vector>#include <map>#include <queue>#include <stack>#include <stdlib.h>using namespace std;const int maxn = 100002;char s1[maxn],s2[maxn];int next[maxn];void getNext(char *s){    int j=0,k=-1;    next[0]=-1;    int len = strlen(s);    while( j < len ){        if(k == -1 || s[j] == s[k])            next[++j] = ++k;        else            k = next[k];    }}int kmp(char *s,char *pat){    int i = 0,j = 0;    int len1 = strlen(s);    int len2 = strlen(pat);    getNext(pat);    while(i < len1 && j < len2){        if( j == -1 || s[i] == pat[j]){            ++i;            ++j;        }        else j = next[j];    }    if( i >= len1 )        return j;    return 0;}int main(){    while(scanf("%s%s",s1,s2)!=EOF){        int ans1,ans2;        ans2 = kmp(s1,s2);        ans1 = kmp(s2,s1);        if( ans1 == ans2)            if(strcmp(s1,s2) < 0)                printf("%s%s",s1,s2+ans2);            else                printf("%s%s",s2,s1+ans1);        else if( ans2 > ans1 )            printf("%s%s",s1,s2+ans2);        else            printf("%s%s",s2,s1+ans1);        printf("\n");    }    return 0;}

 
0 0
原创粉丝点击