class TrieNode(object):
def __init__(self):
self.path=0
self.end=0
self.map=[None for i in range(26)]
class Trie:
def __init__(self):
"""
Initialize your data structure here.
"""
self.root=TrieNode()
def insert(self, word: str) -> None:
"""
Inserts a word into the trie.
"""
node=self.root
if not word:
return
for i in word:
index=ord(i)-ord('a')
if node.map[index]==None:
node.map[index]=TrieNode()
node=node.map[index]
node.path+=1
node.end+=1
def search(self, word: str) -> bool:
"""
Returns if the word is in the trie.
"""
if not word:
return 0
node=self.root
for i in word:
index=ord(i)-ord('a')
if node.map[index]==None:
return False
node=node.map[index]
return bool(node.end)
def startsWith(self, prefix: str) -> bool:
"""
Returns if there is any word in the trie that starts with the given prefix.
"""
if not prefix:
return
node=self.root
for i in prefix:
index=ord(i)-ord('a')
if node.map[index] == None:
return False
node = node.map[index]
return bool(node.path)
def dele(self,word):
if self.search(word) != 0:
node = self.root
for i in word:
index = ord(i)-ord('a')
node.map[index].path -=1
if node.map[index].path==0:
#本来原来就有一个 再删一个 就没了
#变成0 代表不需要此节点了
node.map[index] = None
return
node = node.map[index]
node.end-=1
前缀树Trie (python版本)(leetcode 208题)
最新推荐文章于 2025-05-16 01:00:00 发布