#1014 : Trie树

来源:互联网 发布:自干五 小粉红 知乎 编辑:程序博客网 时间:2024/06/05 20:54

思路:

裸字典树

#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;}


0 0
原创粉丝点击