带有子串匹配的python trie实现

时间:2012-11-19 13:59:49

标签: python data-structures tree substring trie

我的问题: 假设我有字符串:

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').

有什么建议吗?

2 个答案:

答案 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']