美文网首页
week2_Trie树

week2_Trie树

作者: vaisy | 来源:发表于2017-03-10 00:01 被阅读0次

    对于每一个给出的字符串,都在词典里找到以这个字符串开头的所有词;
    我是真的不擅长树特别怕图论。大概数据结构真的不好。
    硬着头皮编吧。
    设计的数据结构是:
    self:当前字母;
    是否指向a-z:长度为26的数组;分别指向子树。
    子树的节点个数:初始化为1,每当有路过即+1;
    所以L[0]={a,0001000000000...1...0}
    C不支持动态数组;所以是定义struct;然后申请100W辣么大的数组?
    至于那个100w怎么算出来的。。。
    我赌五毛它是觉得一个单词有10那么长还相互正交,10w个单词嘛。
    100w是需要在函数外宏定义的。
    这个题基本也就这样了。
    我先睡一觉起来继续 太困了。
    正好algorithmfans讲到Trie树

    真的做的时候没有想的那么复杂。
    talk is cheap。

    void build(char *s)
    {
        int i=0,p=0;//现在位于p点
        while(s[i])
        {
            int x=s[i]-'a';
            if(!T[p].next[x])//如果不存在,新建
            {
                T[le].init();
                T[p].next[x]=le++;//p+x的节点指向le
            }
            p=T[p].next[x];
            T[p].cnt++;
            i++;
        }
    }
    void query(char *s)
    {
        int i=0,p=0;//现在位于p点
        while(s[i])
        {
            int x=s[i]-'a';
            if(!T[p].next[x])
            {
                puts("0");
                return ;
            }
            p=T[p].next[x];
            i++;
        }
        cout<<T[p].cnt<<endl;
    }
    

    相关文章

      网友评论

          本文标题:week2_Trie树

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