CFInsight / utils /trie.py
PocketSkye's picture
Deploy FastAPI app
777d84a
Raw
History Blame Contribute Delete
1.27 kB
class TrieNode:
def __init__(self):
self.children = {}
self.is_end = False
class Trie:
def __init__(self):
self.root = TrieNode()
def insert(self, word: str):
node = self.root
for char in word.lower():
if char not in node.children:
node.children[char] = TrieNode()
node = node.children[char]
node.is_end = True
def _search(
self,
node,
prefix,
results,
limit
):
if len(results) >= limit:
return
if node.is_end:
results.append(prefix)
for char, child in node.children.items():
self._search(
child,
prefix + char,
results,
limit
)
def search_prefix(
self,
prefix: str,
limit: int = 5
):
node = self.root
prefix = prefix.lower()
for char in prefix:
if char not in node.children:
return []
node = node.children[char]
results = []
self._search(
node,
prefix,
results,
limit
)
return results