字典树又一基本题
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; #define N 1027 struct node { int count; node *next[30]; }*root; char ss[13]; node *create() { node *p; p = (node *)malloc(sizeof(node)); p->count = 1; for(int i=0;i<26;i++) p->next[i] = NULL; return p; } void release(node *p) { for(int i=0;i<26;i++) { if(p->next[i] != NULL) release(p->next[i]); } free(p); } void insert(char *ss) { int i=0,k; node *p = root; while(ss[i]) { k = ss[i++] - ‘a‘; if(p->next[k] == NULL) p->next[k] = create(); else p->next[k]->count++; p = p->next[k]; } } int search(char *ss) { int i=0,k,j; node *p = root; int now = 0; while(ss[i]) { k = ss[i++] - ‘a‘; p = p->next[k]; if(p == NULL) return 0; else now = p->count; } return now; } int main() { int i=0,j,k; root = create(); while(gets(ss)&&ss[0]!=‘\0‘) { insert(ss); } i=0; while(scanf("%s",ss)!=EOF) { printf("%d\n",search(ss)); } release(root); return 0; }