12222
来源:互联网 发布:sql计算列总和 编辑:程序博客网 时间:2024/06/05 02:05
#include <string.h>#include <stdio.h>#include <stdlib.h>#define YES 1#define NO 0#define NUM 26struct trie{ trie * next[NUM]; int isword;};trie head,*t,*s;int Max;char str1[100];int exist(trie &head,char x[]){ s=&head; for(;*x;*x++) if(s->next[*x-'a']==NULL)return NO; else s=s->next[*x-'a']; return YES;}trie* Create() { trie* p = (trie*)malloc(sizeof (trie)); for (int i = 0; i < NUM; i++) p->next[i] = NULL; p->isword = NO; return p;}int insert(trie &head,char x[]){ int cnt = 0; s=&head; char *p=x; for(;*x;*x++) { if(s->next[*x-'a']==NULL) s->next[*x-'a'] = Create(); s=s->next[*x-'a'];if(s->isword){cnt++;Max = Max<cnt?cnt:Max;strcpy(str1, p);} } if(!s->isword) {s->isword=YES;cnt++;Max = Max<cnt?cnt:Max;strcpy(str1, p); } return NO;}void deltrie(trie *current){int i;for(i=1;i<NUM;i++){if(current->next[i]==NULL) continue;deltrie(current->next[i]);}free(current);current=NULL;}void inittrie(trie &head){int i;for(i=0;i<NUM;i++)head.next[i]=NULL;head.isword=NO;}int main(){trie head;char str[100];Max = 0;while(scanf("%s", str)==1){insert(head, str);printf("%d %s\n", Max, str1);}return 0;}