2 3 good oo one goodafternooneveryone 1 to welcometotopcoder
oo to
Jason Yang
#include <stdio.h> #include <string.h> #include <string> #include <math.h> #include <stdlib.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include<queue> #include<stack> using namespace std; char s1[1000010]; char s2[101]; int next[101]; char str[200][200]; void get_next(char *t) { int i,j; i=0; j=-1; next[0]=-1; int len_t=strlen(t); while(i<len_t) { if(j==-1||t[i]==t[j]) { ++i; ++j; if(t[i]==t[j]) next[i]=next[j]; else next[i]=j; } else { j=next[j]; } } } int KMP(char *s,char *t) { get_next(t); int len_s=strlen(s); int len_t=strlen(t); int i,j; i=j=-1; int num=0; while(i<len_s) { if(j==-1||s[i]==s[j]) { ++i; ++j; } else { j=next[j]; } if(j==len_t) { j=next[j]; num++; } } return num; } int main() { int T; scanf("%d",&T); while(T--) { int MAX,now,n; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%s",str[i]); } scanf("%s",s1); MAX=-1; for(int i=0;i<n;i++) { now=KMP(s1,str[i]); if(now>=MAX) { MAX=now; strcpy(s2,str[i]); } } printf("%s\n",s2); } return 0; }
原文地址:http://blog.csdn.net/holyang_1013197377/article/details/42177691