所以这就是我现在所拥有的,我一直在努力实现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”的实例
我在实施它时遇到了麻烦
答案 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())
正如我所指出的那样,我在每个节点中添加了计数并且很容易计算它 谢谢你的帮助!!