zoukankan      html  css  js  c++  java
  • 字典树模板(前缀查找、整串查找)

    学习了一波字典树,模板放出:

    #include<math.h>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    #include<sstream> //istringstream stm(string); stm >> x;
    #define INF 2139062143
    #define inf -2139062144
    #define ll long long
    using namespace std;
    
    typedef struct Trie {
        int v;
        Trie *next[26];
    } Trie;
    
    Trie root;
    
    void createTrie(char *str) {    //插入新的字符串
        int len = strlen(str);
        Trie *p = &root, *q;
        for(int i=0; i<len; ++i) {
            int id = str[i]-'a';
            if(p->next[id] == NULL) {
                q = (Trie *)malloc(sizeof(root));
                q->v = 1;
                for(int j=0; j<26; ++j)
                    q->next[j] = NULL;
                p->next[id] = q;
                p = p->next[id];
            } else {
                p->next[id]->v++;
                p = p->next[id];
            }
        }
    }
    
    int findStr(char *str) {    //查找字符串
        int len = strlen(str);
        Trie *p = &root;
        for(int i=0; i<len; ++i) {
            int id = str[i]-'a';
            p = p->next[id];
            if(p == NULL)
                return 0;
        }
        int ans = p->v;
        for(int i = 0;i<26;i++){
            Trie *temp = p->next[i];
            if(temp != NULL)    ans -= temp->v;
        }
        return ans;
    }
    
    int findSuffix(char *str) {        // 查找前缀
        int len = strlen(str);
        Trie *p = &root;
        for(int i=0; i<len; ++i) {
            int id = str[i]-'a';
            p = p->next[id];
            if(p == NULL)
                return 0;
        }
        return p->v;
    }
    
    int main() {
        char str[15];
        int i;
        for(i=0; i<26; ++i)
            root.next[i] = NULL;
        while(gets(str) && str[0]!='')
            createTrie(str);
        memset(str, 0, sizeof(str));
        while(scanf("%s", str) != EOF) {
            int ans = findStr(str);
            printf("%d
    ", ans);
        }
        return 0;
    }
  • 相关阅读:
    UVaLive 7362 Farey (数学,欧拉函数)
    UVaLive 7361 Immortal Porpoises (矩阵快速幂)
    UVaLive 7359 Sum Kind Of Problem (数学,水题)
    CodeForces 706D Vasiliy's Multiset (字典树查询+贪心)
    负载均衡服务器
    集群-如何理解集群?
    架构规划
    领域模型
    状态图
    E-R图
  • 原文地址:https://www.cnblogs.com/zinyy/p/9138962.html
Copyright © 2011-2022 走看看