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;
    }
  • 相关阅读:
    Antenna Placement poj 3020
    Asteroids
    深入了解IOC
    Java读取.properties配置文件
    java使用插件pagehelper在mybatis中实现分页查询
    javaweb分页查询实现
    java生成UUID
    java验证码的制作和验证
    java调用天气预报接口案例
    Maven入门
  • 原文地址:https://www.cnblogs.com/zinyy/p/9138962.html
Copyright © 2011-2022 走看看