LeetCode-208前缀树
分析
这题是让我们实现一个trie树,关于trie树,这里就不重复介绍了,不难,自己查阅
都知道trie树适合存储字符串,interesting和interested共用interest这个前缀,这样能节省存储空间
使用的数据结构
- 我们要知道一个节点
- 存储了它的子节点
- 还需要一个flag来标记它是否是一个单词
- 这里使用python的字典结构,当然你也可以新建一个节点类
code
class Trie:
def __init__(self):
"""
Initialize your data structure here.
"""
self.root = {}
self.isword = '#'
def insert(self, word: str) -> None:
"""
Inserts a word into the trie.
"""
node = self.root
for c in word:
node = node.setdefault(c, {})
node[self.isword] = True
def search(self, word: str) -> bool:
"""
Returns if the word is in the trie.
"""
node = self.root
for c in word:
node = node.get(c)
if not node:
return False
return True if '#' in node else False
def startsWith(self, prefix: str) -> bool:
"""
Returns if there is any word in the trie that starts with the given prefix.
"""
node = self.root
for c in prefix:
node = node.get(c)
if not node:
return False
return True
测试用例的树形结构
有兴趣的同学可以试着再写写leetcode的 211 和 677 两题
欢迎一起来参与leetcode刷题项目
刷题的GitHub: github链接.