单词数 HDU - 2072 纯字典树个人理解

lily的好朋友xiaoou333最近很空,
他想了一件没有什么意义的事情,
就是统计一篇文章里不同单词的总数。
下面你的任务是帮助xiaoou333解决这个问题。
Input有多组数据,每组一行,每组就是一篇小文章。
每篇小文章都是由小写字母和空格组成,
没有标点符号,遇到#时表示输入结束。
Output每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。Sample
Input
you are my friend

Sample
Output
4

#include 
#include 
#include 
#include 
char s[100000];
int top,sum,i;
struct node{
int data,c[26];
}p[1000000];
int f()
{
    memset(p[top].c,-1,sizeof(p[top].c));
    p[top].data=0;
    top++;
    return top-1;
}
void v(int root)
{
    int j;
    while(s[i]!=' '&&s[i]!='\0')
    {
        j=s[i]-'a';
        if(p[root].c[j]==-1){
            p[root].c[j]=f();
        }
        root=p[root].c[j];
        i++;
    }
    if(p[root].data==0)sum++;
    p[root].data++;
}
int main()
{
    int j,root;
while(gets(s))
{
    sum=0;
    i=0;
    root=f();
    if(s[0]=='#')break;
    while(s[i]!='\0')
    {
        if(s[i]==' ')i++;
        else {
            v(root);
        }
    }
    printf("%d\n",sum);
}
    return 0;
}

你可能感兴趣的:(字典树)