HDU2072:单词数

来源:互联网 发布:马甲线软件 编辑:程序博客网 时间:2024/04/30 06:04

点击打开题目链接

单词数

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 21020    Accepted Submission(s): 5077


Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
 

Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
 

Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
 

Sample Input
you are my friend#
 

Sample Output
4
 

Author
Lily
 

Source
浙江工业大学网络选拔赛
 

Recommend
linle
 


=====================================算法分析=====================================


Trie树。


=======================================代码=======================================




#include<ctype.h>#include<stdio.h>#include<string.h>struct TrieNode { bool exist; TrieNode *next[26]; };TrieNode * NewNode(){    TrieNode *tmp=new TrieNode;    memset(tmp,0,sizeof(TrieNode));    return tmp;}bool Insert(TrieNode *Root,char *Word){    for(int i=0;Word[i];++i)    {        int j=Word[i]-'a';        if(Root->next[j]==NULL) Root->next[j]=NewNode();        Root=Root->next[j];    }    return Root->exist?false:Root->exist=true;}void EmptyTree(TrieNode *Root){if(Root!=NULL){for(int i=0;i<26;++i){   EmptyTree(Root->next[i]);}Root->exist=false;}}int main(){TrieNode *Root=NewNode();char Str[105],Word[105];    while(gets(Str)!=NULL&&strcmp(Str,"#"))    {EmptyTree(Root);int i=0,cnt=0;        while(Str[i])        {            if(islower(Str[i]))            {                int j;                for(j=0;islower(Str[i]);++j)                {                    Word[j]=Str[i++];                }                Word[j]=0;                cnt+=Insert(Root,Word);            }            else            {                ++i;            }        }printf("%d\n",cnt);    }return 0;}
原创粉丝点击