Spaces:
Sleeping
Sleeping
| 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 |