HDU-1867-A + B for you again

//这是一道字符串匹配的问题(KMP),我们先把它们按照题目要求,求出最大匹配数,然后比较,输出最大的,相同则输出字典数小的//

AC代码:

#include<stdio.h>
#include<string.h>
#define N 100005
int next[N]; char s[N]; char t[N]; void get_next(char *s,char *t) { int len2=strlen(t); int i=0; int j=-1;
    next[0]=-1; while(i<len2) { if(j==-1||t[i]==t[j]) {
            i++;
            j++;
            next[i]=j; } else {
            j=next[j]; } } } int kmp(char *s,char *t) { int len1=strlen(s); int len2=strlen(t);
    memset(next,0,sizeof(next));
    get_next(s,t); int i=0; int j=0; while(i<len1) { if(j==-1||s[i]==t[j]) {
            i++;
            j++; } else {
            j=next[j]; } } return j; } int main() { while(scanf("%s%s",t,s)!=EOF) { int k1=kmp(s,t); int k2=kmp(t,s); if(k1==k2) { if(strcmp(s,t)<0) {
                printf("%s%s",s,t+k1); } else {
                printf("%s%s",t,s+k2); } } else if(k1>k2) {
            printf("%s%s",s,t+k1); } else {
            printf("%s%s",t,s+k2); }
        printf("\n"); } return 0; }


你可能感兴趣的:(HDU-1867-A + B for you again)