Trie数据结构,从给定

时间:2018-01-21 05:00:56

标签: python-3.x algorithm data-structures

所以这就是我现在所拥有的,我一直在努力实现trie数据结构和

al=list(string.ascii_lowercase)
d={} #for mapping
for i in range(26):
    d[al[i]]=i       #creating mappings like 'a'=0 ...'z'=25

print(d)

class node:
    def __init__(self):
        self.children=[0]*26    #0 would indicate ending
        self.val=None

class trie:
    def __init__(self):
        self.root=node()

    def insert(self,word):
        t=self.root
        for i in word:

            if t.children[d[i]]!=0:
                print('traversing')
                t=t.children[d[i]]
            else:
                #print('here')
                t.children[d[i]]=node()
                t.children[d[i]].val=i;

                t=t.children[d[i]]

    def search(self,word):
        t=self.root
        for i in word:
            if t.children[d[i]]!=0:
                t=t.children[d[i]]
            else:
                return 0

        return 1

所以这是我已经能够实现trie(如果有任何优化,请提及它:)) 现在我的问题是如果我在我的特里有('Stack','Stackoverflow','Stackover','LOL')并且我已经给了字符串'Stack'所以我的答案将是3次出现 所以对于上述情况:
   - >输入:'堆栈'
   - >输出:3
基本上我想知道在我的Trie中存储了多少部分字符串“Stack”的实例 我在实施它时遇到了麻烦

1 个答案:

答案 0 :(得分:-1)

import string
al=list(string.ascii_lowercase)
d={} #for mapping
for i in range(26):
    d[al[i]]=i

print(d)

class node:
    count=0
    def __init__(self):
        self.children=[0]*26
        self.val=None
    def increment(self):                  #this is the change 
        self.count=self.count+1

    def showcount(self):
        return(self.count)


class trie:
    def __init__(self):
        self.root=node()

    def insert(self,word):
        t=self.root
        for i in word:

            if t.children[d[i]]!=0:
                print('traversing')
                t=t.children[d[i]]
                t.increment()
            else:
                #print('here')
                t.children[d[i]]=node()
                t.children[d[i]].val=i;
                print(t.children)
                t=t.children[d[i]]
                print(t.val)
                t.increment()





    def search(self,word):
        t=self.root
        for i in word:
            if t.children[d[i]]!=0:
                t=t.children[d[i]]
            else:
                return 0

        return(1)

    def count(self, word):
        t=self.root
        for i in word:
            if t.children[d[i]] != 0:
                t = t.children[d[i]]
            else:
                 return 0
        print(t.val)
        return(t.showcount())

正如我所指出的那样,我在每个节点中添加了计数并且很容易计算它 谢谢你的帮助!!