#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node
{
int id;
struct node *next[26];
} NODE;
NODE T[1000000];
int top;
int count;
NODE *creat()
{
NODE *p;
int i;
p = &T[top++];
for(i=0; i<26; i++)
{
p->next[i]=NULL;
}
p->id=0;
return p;
}
void insert(NODE *root,char s[])
{
NODE *p=root;
int i;
for(i=0; s[i]!='\0'; i++)
{
int x=s[i]-'a';
if(p->next[x]!=NULL)
{
p=p->next[x];
}
else
{
p->next[x]=creat();
p=p->next[x];
}
}
if(p->id!=1)
{
count++;
}
p->id=1;
}
int main()
{
int i,j,k,n,m;
char s[20000];
char a[1000000];
while(gets(a)!=NULL&&strcmp(a,"#")!=0)
{
struct node *root;
root=(struct node *)malloc(sizeof(struct node));
count=0;
top=0;
int y;
root=creat();
if(a[0]!=' ')
{
for(i=0; a[i]!=' '&&a[i]!='\0'; i++)
{
s[i]=a[i];
}
s[i]='\0';
insert(root,s);
}
for(i=0; a[i+1]!='\0'; i++)
{
if(a[i]==' '&&a[i+1]!=' ')
{
y=0;
for(j=i+1;a[j]!=' '&&a[j]!='\0';j++)
{
s[y++]=a[j];
}
s[y]='\0';
insert(root,s);
}
}
printf("%d\n",count);
}
return 0;
}
找一篇文章中不同单词的个数(字典树)
最新推荐文章于 2019-08-22 10:30:12 发布