题目链接 点击打开链接
字典树模板题,唯一需要注意的就是空行的处理..
#include <cstdio> #include <iostream> #include <cstring> using namespace std; char ch[15]; //接受输入 int num; struct Node{ int count; Node *next[26]; Node(){ count = 0; for(int i = 0;i < 26;i++) next[i] = NULL; } }*root; /** *建字典树 */ void Build(char ch[]){ Node *p = root; //当前位置 int len = strlen(ch); int k; //next数组下标 for(int i = 0;i < len;i++){ k = ch[i] - 'a'; if(p->next[k] == NULL){ p->next[k] = new Node(); } p = p->next[k]; p->count++; } } /** *查询 */ int Query(char ch[]){ Node *p = root; int len = strlen(ch); int k; for(int i = 0;i < len;i++){ k = ch[i] - 'a'; if(p->next[k] == NULL) //不存在查询的单词 return 0; p = p->next[k]; } return p->count; } int main(){ root = new Node(); char t; while(1) { cin.getline(ch,12); //用来处理空行 if(strlen(ch) == 0) break; Build(ch); } char q[12]; while(scanf("%s",q) != EOF){ printf("%d\n",Query(q)); } return 0; }