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;}