Trie树

建立一个字典树,先存入单词,再查找单词,最后输出具有该前缀的单词数量。

#include<cstdio>
#include<cstdlib>

struct node
{
    int cnt;
    int next[26];
} T[10000010];

int t=0;
char str[20];

void Insert(char *s)
{
    int i=0, p=0, temp;
    while(s[i])
    {
        temp=s[i]-'a';
        if(T[p].next[temp]==0)
        {
            t++;
            T[p].next[temp]=t;
        }
        p=T[p].next[temp];
        T[p].cnt++;
        i++;
    }
}

void Query(char *s)
{
    int i=0, p=0, temp;
    while(s[i])
    {
        temp=s[i]-'a';
        if(T[p].next[temp]==0)
        {
            printf("0\n");
            return ;
        }
        p=T[p].next[temp];
        i++;
    }
    printf("%d\n",T[p].cnt);
    return ;
}

int main()
{
    int m, n;
    scanf("%d", &n);
    getchar();
    while(n--)
    {
        gets(str);
        Insert(str);
    }
    scanf("%d", &m);
    getchar();
    while(m--)
    {
        gets(str);
        Query(str);
    }
    return 0;
}

核心代码:

void Insert(char *s)
{
    int i=0, p=0, temp;
    while(s[i])
    {
        temp=s[i]-'a';
        if(T[p].next[temp]==0)
        {
            t++;
            T[p].next[temp]=t;
        }
        p=T[p].next[temp];
        T[p].cnt++;
        i++;
    }
}

先判断是否存在该前缀,如果不存在,就构建新的枝叶。
查找一个就为该枝叶记一次数,表示到该枝叶的前缀个数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 字典树(Trie)笔记 特别声明 本文只是一篇笔记类的文章,所以不存在什么抄袭之类的。 以下为我研究时参考过的链接...
    Harlan1994阅读 20,320评论 2 21
  • 题目: 时间限制:10000ms单点时限:1000ms内存限制:256MB描述小Hi和小Ho是一对好朋友,出生在信...
    科学旅行者阅读 1,228评论 0 0
  • Trie树,即字典树,又称单词查找树。经常应用于字符串的统计与排序,经常被搜索引擎系统用于文本词频统计。 核心思想...
    wayyyy阅读 3,345评论 0 0
  • 一个下着大雨的夜晚,我变得异常烦躁,什么也做不好。弹古筝时我只要弹错一个音就会愤怒地用手砸琴,“咣咣”,我妈妈和大...
    小学生朱提提阅读 2,999评论 0 3
  • 受小石被领导重视的影响,想起自己被领导说先去当间谍然后就是自己人,因我考虑到好同事友的关系没去,当然也被领导边缘化...
    北极熊和小兔子阅读 3,499评论 0 49