题目链接:https://leetcode.cn/problems/implement-trie-prefix-tree/
难度:中等
描述:Trie
(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。
请你实现 Trie
类:
Trie()
初始化前缀树对象。void insert(String word)
向前缀树中插入字符串word
。boolean search(String word)
如果字符串word
在前缀树中,返回true
(即,在检索之前已经插入);否则,返回false
。boolean startsWith(String prefix)
如果之前已经插入的字符串word
的前缀之一为prefix
,返回true
;否则,返回false
。
题解
class Trie:
def __init__(self):
self.end = False
self.next = [None] * 26
def insert(self, word: str) -> None:
node = self
for c in word:
if node.next[ord(c) - ord('a')] is None:
node.next[ord(c) - ord('a')] = Trie()
node = node.next[ord(c) - ord('a')]
node.end = True
def search(self, word: str) -> bool:
node = self
for c in word:
if node.next[ord(c) - ord('a')] is None:
return False
node = node.next[ord(c) - ord('a')]
return node.end
def startsWith(self, prefix: str) -> bool:
node = self
for c in prefix:
if node.next[ord(c) - ord('a')] is None:
return False
node = node.next[ord(c) - ord('a')]
return True