题目链接: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

题解

  1. class Trie:
  2. def __init__(self):
  3. self.end = False
  4. self.next = [None] * 26
  5. def insert(self, word: str) -> None:
  6. node = self
  7. for c in word:
  8. if node.next[ord(c) - ord('a')] is None:
  9. node.next[ord(c) - ord('a')] = Trie()
  10. node = node.next[ord(c) - ord('a')]
  11. node.end = True
  12. def search(self, word: str) -> bool:
  13. node = self
  14. for c in word:
  15. if node.next[ord(c) - ord('a')] is None:
  16. return False
  17. node = node.next[ord(c) - ord('a')]
  18. return node.end
  19. def startsWith(self, prefix: str) -> bool:
  20. node = self
  21. for c in prefix:
  22. if node.next[ord(c) - ord('a')] is None:
  23. return False
  24. node = node.next[ord(c) - ord('a')]
  25. return True