美文网首页
字典树模板

字典树模板

作者: Anxdada | 来源:发表于2017-04-27 20:16 被阅读0次

模板题
AC代码 : //注意要用C++交,G++会MLE. (100ms左右)

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;

typedef struct trie
{
    int cnt;     //统计每个单词前缀出现的次数(也包括统计每个单词出现的次数)
    struct trie *next[26];
}Trie;

Trie *creatTrieNode()  //初始化节点.
{
    Trie *node = (Trie *)malloc(sizeof(Trie));
    node->cnt=0;
    memset(node->next, 0, sizeof(node->next));   //初始化为空指针.
    return node;
}

void Trie_Insert(Trie *root , char *word)
{
    Trie *node = root;
    char *p = word;
    int id;
    while(*p != '\0' )   //只有读到字符串末尾才会停止读入,即读到'\0'出.
    {
        id = *p - 'a';
        if(node->next[id] == NULL){
            node->next[id] = creatTrieNode();
        }
        node = node->next[id];
        ++p;
        node->cnt += 1 ;    //这行代码用于统计每个单词前缀出现的次数(也包括统计每个单词出现的次数)
    }
}

int Trie_Search(Trie *root , char *word)
{
    Trie *node = root;
    char *p = word ;
    int id;
    while( *p != '\0')
    {
        id = *p - 'a';
        node = node->next[id];
        ++p;
        if(node == NULL)
            return 0;
    }
    return node->cnt;
}
int main()
{
    Trie *root =  creatTrieNode();// 初始化字典树的根节点
    char str[15];
    int flag=0;
    while(gets(str)){
        if(flag)
            printf("%d\n",Trie_Search(root,str));
        else{
            if(strlen(str) != 0)
                Trie_Insert(root,str);
            else
                flag=1;
        }
    }
}

对于这道题,由于数据问题,也可以用map水过.(800ms左右)
代码如下:

#include<cstdio>
#include<map>
using namespace std;
map<string,int>mp;
int main()
{
    char s[15];
    while(gets(s)){
        if(strlen(s) == 0)
            break;
        for(int i=strlen(s);i>0;i--){
            s[i] = '\0';  //把最后一个字符替换成结束符号.
            mp[s]++;
        }
    }
    while(gets(s)){
        printf("%d\n",mp[s]);
    }
}

相关文章

  • 字典树模板

    模板题AC代码 : //注意要用C++交,G++会MLE. (100ms左右) 对于这道题,由于数据问题,也...

  • 字典树模板(非原创)

    动态版本 静态版本(更快)

  • 2019-03-31字典树Tire

    字典树图示 字典树案例

  • Trie

    字典树 01字典树

  • (六)树结构---字典树

    1.字典树基础 1.1.字典树 字典树又称前缀树,对于一个字符串在加入字典树结构时,会合并相同的字符,字典树是一种...

  • HDU 1251 统计难题(字典树模板题)

    Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出...

  • G++与C++的一些坑点。。。

    字典树模板题交G++,MLE到怀疑人生,今天和一个dalao讨论,dalao说C++可以过。。一交++过。。。所以...

  • 字典树

  • 字典树

    需求: 判断文本中是否包含某个词, 以及词频问题:中文分词实际使用的词典往往在几十万个词以上,逐个匹配成本太大。方...

  • 字典树

    功能 字典树是用数组存储大量字符串的一种算法 字典树算法开辟空间非常大,但是对于字符串插入和查询有很快的速度 用法...

网友评论

      本文标题:字典树模板

      本文链接:https://www.haomeiwen.com/subject/urnwzttx.html