1858. Longest Word With All Prefixes
On This Page
class Trie:
__slots__ = ["children", "is_end"]
def __init__(self):
self.children: List[Trie | None] = [None] * 26
self.is_end: bool = False
def insert(self, w: str) -> None:
node = self
for c in w:
idx = ord(c) - ord("a")
if not node.children[idx]:
node.children[idx] = Trie()
node = node.children[idx]
node.is_end = True
def search(self, w: str) -> bool:
node = self
for c in w:
idx = ord(c) - ord("a")
node = node.children[idx]
if not node.is_end:
return False
return True
class Solution:
def longestWord(self, words: List[str]) -> str:
trie = Trie()
for w in words:
trie.insert(w)
res = ""
for w in words:
if (len(w) > len(res) or len(w) == len(res) and w < res) and trie.search(w):
res = w
return res