zoukankan      html  css  js  c++  java
  • trie树(板子)

    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    using namespace std;
    #define fuck(x) cout<<#x<<" "<<x<<endl;
    struct node
    {
        int cnt,tag;
        node*son[26];
    }*root;
    char s[105];
    node*build()
    {
        node*tmp=new(node);
        tmp->cnt=0;
        tmp->tag=0;
        memset(tmp->son,0,sizeof(tmp->son));
        return tmp;
    }
    void myinsert()
    {
        int len=strlen(s);
        char*p=s;
        node*r=root;
        while(*p)
        {
            int id=*p-'a';
            if(!(r->son[id]))
                r->son[id]=build();
            r=r->son[id];
            if((s+len-1)!=p)
                (r->cnt)++;
            p++;
        }
        r->tag++;
    }
    int query1()
    {
        char*p=s;
        node*r=root;
        while(*p)
        {
            int id=*p-'a';
            if(!(r->son[id]))
                return 0;
            p++;
            r=r->son[id];
        }
        return r->tag;
    }
    int query2()
    {
        char*p=s;
        node*r=root;
        while(*p)
        {
            int id=*p-'a';
            if(!(r->son[id]))
                return 0;
            p++;
            r=r->son[id];
        }
        return r->cnt;
    }
    int main()
    {
        int n,m;
        scanf("%d %d",&n,&m);
        root=build();
        for(int i=1;i<=n;i++)
            scanf("%s",s),myinsert();
        for(int i=1;i<=m;i++)
        {
            int ans;
            scanf("%s",s);
            ans=query1();
            cout<<"字符串:"<<s<<"出现了"<<ans<<"次"<<endl;
            ans=query2();
            cout<<"字符串:"<<s<<"作为前缀出现了"<<ans<<"次"<<endl;
        }
        return 0;
    }
    
  • 相关阅读:
    Spring第一次测试错题解析
    正则回顾
    Spring经典---AOP
    动态代理
    MyBatis第一次测试卷---错题分析
    JS中对数组元素进行增删改移
    限制条件补全代码系列题
    字符串去空格
    数组去重
    数组排序
  • 原文地址:https://www.cnblogs.com/eason9906/p/11754872.html
Copyright © 2011-2022 走看看