zoukankan      html  css  js  c++  java
  • HDU1251统计难题trie

    hash的一个变种.



    构造的树形如上图,不过有一点要记住,就是这道题中,,用next[id]这个指针来作为节点的地址。而通过next[id]->count来存放有这种前缀的单词的个数。。。

    代码:

    #include<iostream> 
    #include<cstring> 
    using namespace std; 
    typedef struct Trie 

        Trie* next[26]; 
        int count; 
    } xixi; 
    xixi root; 
    void maketrie(char* str)   //建立树形 

        xixi *p=&root,*q; 
        int len=strlen(str); 
     
        for(int i=0; i<len; i++) 
        { 
            int id=str[i]-'a'
            if(p->next[id]==NULL) 
            { 
                q=(xixi*)malloc(sizeof(xixi)); 
                for(int j=0; j<26; j++) 
                { 
                    q->next[j]=NULL; 
                } 
                q->count=1
                p->next[id]=q; 
                p=p->next[id]; 
            } 
            else 
            { 
                p->next[id]->count++; 
                p=p->next[id]; 
            } 
        } 

    void findcount(char* str)   //计算出现这种前缀的个数count 

        xixi *p=&root; 
        int len=strlen(str); 
        for(int i=0; i<len; i++) 
        { 
            int id=str[i]-'a'
            if(p->next[id]==NULL) 
            { 
                cout<<'0'<<endl; 
                return ; 
            } 
            else 
            { 
                p=p->next[id]; 
            } 
        } 
        cout<<p->count<<endl; 
        return ; 

    int main(void

        char str[20]; 
        while(gets(str),str[0]!='\0')//这里要注意,不能用‘\n’作为结束,这样就错误了。(哎,还犯这种错误) 
     
        { 
            maketrie(str); 
        } 
        while(gets(str)) 
        { 
            findcount(str); 
        } 
        return 0

     
     
     
  • 相关阅读:
    2018年春季个人阅读计划
    软件需求与分析读后感
    假期读后感3
    假期读后感2
    假期读后感1
    四则运算2
    软件工程概论第一次作业
    《大道至简》读后感
    HMX-Server C++ 分步式服务器大版本更新了(有源码)
    HMX-Server-分步式服务器框架(开源+源码)
  • 原文地址:https://www.cnblogs.com/cchun/p/2520065.html
Copyright © 2011-2022 走看看