题目大意:
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀)。
思路:
字典树模板题。
代码:
#include<iostream> #include<stdio.h> using namespace std; struct trie //利用结构体来封装字典树的节点。 { trie* next[26]; int num; trie() //构造函数。 { for(int i=0;i<26;i++) next[i]=NULL; num=0; } }root; void insert(char* s) //将字符串s所表示的单词插入到字典树中。 { trie *p=&root; for(int i=0;s[i]!='\0';i++) { if(p->next[s[i]-'a']==NULL) p->next[s[i]-'a']=new trie; p=p->next[s[i]-'a']; p->num++; } } int find(char *s) //返回值是以s为前缀的单词的数量。 { trie *p=&root; for(int i=0;s[i]!='\0';i++) if(p->next[s[i]-'a']==NULL) return 0; else p=p->next[s[i]-'a']; return p->num; } int main() { char str[11]; while(gets(str)&&str[0]!='\0') insert(str); while(~scanf("%s",str)) printf("%d\n",find(str)); }