在Python中使用 pytrie 模块进行前缀匹配
给定一个字符串列表和一个前缀值子字符串,从给定字符串列表中找到所有包含给定值作为前缀的字符串?
例子:
Input : arr = ['geeksforgeeks', 'forgeeks',
'geeks', 'eeksfor'],
prefix = 'geek'
Output : ['geeksforgeeks','geeks']
解决此问题的一种简单方法是遍历完整列表并将给定前缀与每个字符串一一匹配,打印所有包含给定值作为前缀的字符串。
我们有现有的解决方案来使用 Trie 数据结构来解决这个问题。我们可以使用pytrie.StringTrie()模块在Python中实现 Trie。
在 pytrie.StringTrie() 中创建、插入、搜索和删除?
- 创建: trie=pytrie.StringTrie()创建一个空的 trie 数据结构。
- Insert : trie[key]=value , key是我们要在 trie 中插入的数据, value类似于桶,它被附加在插入键的最后一个节点之后,这个桶包含插入的键的实际值。
- 搜索: trie.values(prefix) ,返回包含给定前缀的所有键的列表。
- Delete : del trie[key] ,从 trie 数据结构中删除指定的键。
注意:要安装pytrie包,请使用来自 linux 终端的pip install pytrie –user命令。
# Function which returns all strings
# that contains given prefix
from pytrie import StringTrie
def prefixSearch(arr,prefix):
# create empty trie
trie=StringTrie()
# traverse through list of strings
# to insert it in trie. Here value of
# key is itself key because at last
# we need to return
for key in arr:
trie[key] = key
# values(search) method returns list
# of values of keys which contains
# search pattern as prefix
return trie.values(prefix)
# Driver program
if __name__ == "__main__":
arr = ['geeksforgeeks','forgeeks','geeks','eeksfor']
prefix = 'geek'
output = prefixSearch(arr,prefix)
if len(output) > 0:
print (output)
else:
print ('Pattern not found')
输出:
['geeksforgeeks','geeks']