//这是一道字符串匹配的问题(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; }