1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| #include<stdio.h> #include<string.h> struct Tire{ int count; Tire *next[26]; }; Tire *root; int Max; char Maxs[11]; char ss[11]; void insert(char *s) { if(root==NULL || *s=='\0') return ; Tire *p=root; int i; int n; while(*s!='\0') { n=*s-'a'; if(p->next[n]==NULL) { Tire *temp=new Tire; for(i=0;i<26;i++) temp->next[i]=NULL; temp->count=0; p->next[n]=temp; } p=p->next[n]; s++; } p->count++; if(p->count>Max){ Max=p->count; strcpy(Maxs,ss);} } int main() { int N; int i; while(~scanf("%d",&N)) { root=new Tire; for(i=0;i<26;i++) root->next[i]=NULL; root->count=0; Max=0; while(N--) { scanf("%s",ss); insert(ss); } printf("%s %d\n",Maxs,Max); } return 0; }
|
我觉得这题应该可以用哈希表做,但是我没试验过,不知道可不可以过,不过你们可以试试。