From 61dc19fb29e9c1d39e85ce74485c5723d369cd7b Mon Sep 17 00:00:00 2001 From: Prad Nukala Date: Mon, 21 Sep 2026 12:50:51 -0400 Subject: [PATCH] docs(docs): add MDX page for LeetCode 211 design problem --- ...gn-add-and-search-words-data-structure.mdx | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 apps/docs/content/(string)/211-design-add-and-search-words-data-structure.mdx diff --git a/apps/docs/content/(string)/211-design-add-and-search-words-data-structure.mdx b/apps/docs/content/(string)/211-design-add-and-search-words-data-structure.mdx new file mode 100644 index 0000000..836339d --- /dev/null +++ b/apps/docs/content/(string)/211-design-add-and-search-words-data-structure.mdx @@ -0,0 +1,65 @@ +--- +title: '211. Design Add and Search Words Data Structure' +description: Design a data structure that supports adding new words and finding if a string matches any previously added string +sidebar: + label: 'Design Add and Search Words Data Structure' + badge: 'Medium' +--- + +Trie + +### Constraints: + +- `1 <= word.length <= 25` +- `word` in addWord consists of lowercase English letters. +- `word` in search consist of '.' or lowercase English letters. +- There will be at most 2 dots in `word` for search queries. +- At most 10^4 calls will be made to addWord and search. + +## Solution + +```py +class TrieNode: + def __init__(self): + self.children = {} + self.endOfWord = False + + +class WordDictionary: + def __init__(self): + self.root = TrieNode() + + def addWord(self, word: str) -> None: + cur = self.root + for c in word: + if c not in cur.children: + cur.children[c] = TrieNode() + cur = cur.children[c] + cur.endOfWord = True + + # Leverage Recursion + def search(self, word: str) -> bool: + def dfs(j, root): + cur = root + for i in range(j, len(word)): + c = word[i] + + if c == ".": + for child in cur.children.values(): + if dfs(i + 1, child): + return True + return False + else: + if c not in cur.children: + return False + cur = cur.children[c] + return cur.endOfWord + + return dfs(0, self.root) + + +# Your WordDictionary object will be instantiated and called as such: +# obj = WordDictionary() +# obj.addWord(word) +# param_2 = obj.search(word) +```