我的问题: 假设我有字符串:
ali, aligator, aliance
因为它们有共同的前缀我想将它们存储在trie中,例如:
trie['ali'] = None
trie['aligator'] = None
trie['aliance'] = None
到目前为止一直很好 - 我可以使用Biopython库中的trie实现。 但是我想要实现的是能够找到包含特定子串的trie中的所有键。
例如:
trie['ga'] would return 'aligator' and
trie['li'] would return ('ali','aligator','aliance').
有什么建议吗?
答案 0 :(得分:1)
编辑:我认为您可能正在寻找Suffix tree,特别注意“后缀树也为最长的常见子字符串问题提供了第一个线性时间解决方案之一。”。
刚刚注意到另一个似乎非常相关的问题:Finding longest common substring using Trie
答案 1 :(得分:-3)
我会做这样的事情:
class Trie(object):
def __init__(self,strings=None):
#set the inicial strings, if passed
if strings:
self.strings = strings
else:
self.strings =[]
def __getitem__(self, item):
#search for the partial string on the string list
for s in self.strings:
if item in s:
yield s
def __len__(self):
#just for fun
return len(self.strings)
def append(self,*args):
#append args to existing strings
for item in args:
if item not in self.strings:
self.strings.append(item)
然后:
t1 = Trie()
t1.append("ali","aligator","aliance")
print list(t1['ga'])
print list(t1['li'])
>>['aligator']
>>['ali', 'aligator', 'aliance']