#1014 : Trie树

xiaoxiao2021-02-28  96

思路:

裸字典树

#include<iostream> #include<string.h> #include <stdlib.h> #include <stdio.h> #include<cstring> using namespace std; typedef struct tree { tree *next[30]; int over; } tree; char s[205]; tree *root; void creat( char str[] ) { int len=strlen(str); tree *p=root, *q; for(int i=0; i<len; i++) { int x; x=str[i]-'a' ; if(p->next[x]==NULL) { q=(tree *)malloc(sizeof(tree)); for(int j=0; j<30; j++) q->next[j]=NULL; p->next[x]=q; p->next[x]->over=0; } p=p->next[x]; p->over++; } } int ok=0; void find(tree* st,char str[]) { int len=strlen(str); if(len==0) { ok=st->over; return; } int x; x=str[0]-'a'; if(st->next[x]==NULL) return ; if(st->next[x]) { find(st->next[x],str+1); } } int main() { int n,m; root=(tree *)malloc(sizeof(tree)); for(int i=0; i<30; i++) root->next[i]=NULL; root->over=0; scanf("%d",&n); for(int k=1;k<=n;k++) { scanf("%s",s); creat( s ); } scanf("%d",&m); for(int i=1;i<=m;i++) { scanf("%s",s); ok=0; find(root,s); printf("%d\n",ok); } return 0; }

转载请注明原文地址: https://www.6miu.com/read-62511.html

最新回复(0)