208. Implement Trie

class TrieNode:
    def __init__(self, char, end):
        self.char = char
        self.end = end
        self.children = {} # { char: TrieNode, ... }
 
class Trie:
    def __init__(self):
        # dict of TrieNodes { char: TrieNode, char: TrieNode, ... }
        self.root = TrieNode(None, True)
 
    def insert(self, word: str) -> None:
        curnode = self.root
        for i, char in enumerate(word):
            if char not in curnode.children:
                new_node = TrieNode(char, i == len(word)-1)
                curnode.children[char] = new_node
            curnode = curnode.children[char]
        curnode.end = True
 
    def search(self, word: str) -> bool:
        curnode = self.root
        for char in word:
            if char in curnode.children:
                curnode = curnode.children[char]
            else:
                return False
        return curnode.end
        
    def startsWith(self, prefix: str) -> bool:
        curnode = self.root
        for char in prefix:
            if char in curnode.children:
                curnode = curnode.children[char]
            else:
                return False
        return True
  • standard implementation of a trie.

Categories:: trie