字典树就是将一个个单词按照字母顺序建成树,可以用于单词去重、计算每种单词的出现次数、计算共出现多少种单词
1 #include<stdio.h> 2 #include<string.h> 3 const int maxm=5050; //所有单词的总长度,约总单词数*5 4 5 struct trie{ 6 int nxt[maxm][26]; 7 bool tail[maxm]; //记录某个结点是否为单词结束,用于统计或标记单词,bool型仅用于判断是否为单词结束并可以查询,将其换成int型也能统计每个单词出现的次数 8 int size; 9 10 void init(){ //初始化函数 11 memset(nxt,-1,sizeof(nxt)); 12 memset(tail,0,sizeof(tail)); 13 size=0; 14 } 15 16 void insert(char word[]){ //添加word 17 int root=0,l=strlen(word); 18 for(int i=0;i<l;i++){ 19 if(nxt[root][word[i]-‘a‘]<0){ 20 nxt[root][word[i]-‘a‘]=++size; 21 } 22 root=nxt[root][word[i]-‘a‘]; 23 } 24 if(!tail[root]&&root!=0)tail[root]=1; //此处可以加计数器统计共出现多少种单词 25 } 26 27 bool find(char word[]){ //查询word,若tail数组为int型,此处返回值也为int型可用于查询单词出现次数 28 int root=0,l=strlen(word); 29 for(int i=0;i<l;i++){ 30 if(nxt[root][word[i]-‘a‘]<0)return 0; 31 root=nxt[root][word[i]-‘a‘]; 32 } 33 return tail[root]; 34 } 35 };
时间: 2024-12-26 20:07:27