设计添加和搜索单词
“设计添加和搜索单词”问题的详细指南和 Python 实现。
1. 学习
“设计添加和搜索单词”问题是 Trie 部分的一个关键挑战。
此实现侧重于 Python 中的简单级逻辑。
在我们提供的解决方案中,我们优先考虑技术准确性和代码可读性。
2. Real-World Applications
3. Visual Intuition
可视化设计添加和搜索单词的逻辑流程。
4. Prerequisites
5. Step-by-Step Thinking
1. Understand the problem
仔细阅读设计添加和搜索单词的问题陈述。
2. Formulate brute force
起草一个简单的迭代解决方案。
3. Identify inefficiency
寻找冗余计算。
4. Optimize search path
使用散列或排序来加速该过程。
5. Final Implementation
清理生产标准代码。
问题陈述
设计一个数据结构,支持添加新单词并查找字符串是否与任何先前添加的字符串匹配。
实现 WordDictionary 类:
- WordDictionary() 初始化对象。
- addWord(word: str) 将word添加到数据结构中,稍后可以进行匹配。
- search(word: str) -> bool 如果数据结构中存在与 word 匹配的任何字符串,则返回 True,否则返回 False。单词可能包含点“.”其中点可以与任何字母匹配。
输入是操作和参数的列表。实现一个函数 wordDictionary(operations: list, arguments: list) -> list 返回结果列表(构造函数/addWord 为 None,搜索为 bool)。
- •1 <= len(word) <= 25
- •word in addWord consists of lowercase English letters
- •word in search consists of '.' or lowercase English letters
- •At most 10^4 calls will be made to addWord and search
示例
operations = ["WordDictionary", "addWord", "addWord", "addWord", "search", "search", "search", "search"], arguments = [[], ["bad"], ["dad"], ["mad"], ["pad"], ["bad"], [".ad"], ["b.."]]
[None, None, None, None, False, True, True, True]
Initialize. Add "bad", "dad", "mad". search("pad") -> False. search("bad") -> True. search(".ad") -> True. search("b..") -> True.
Need a Hint?
Edge Cases to Watch
- 空输入结构
- 单元素输入
- 大数值范围
准备好解决了吗?
Open the problem in PyRun's browser-based Python editor. Your code runs fully offline — no server required.
面试见解和变化
复杂性分析分解
为什么时间: Directly evaluates all possibilities.
为什么选择太空: Uses standard local memory.
为什么时间: Optimized paths reduce total operations.
为什么选择太空: May trade memory for speed.
优化解决方案Python代码
优化解决方案Python代码
class TrieNode:
def __init__(self):
self.children = {}
self.end = False
class WordDictionaryOpt:
def __init__(self):
self.root = TrieNode()
def addWord(self, word):
curr = self.root
for c in word:
if c not in curr.children: curr.children[c] = TrieNode()
curr = curr.children[c]
curr.end = True
def search(self, word):
def dfs(j, root):
curr = root
for i in range(j, len(word)):
c = word[i]
if c == ".":
for child in curr.children.values():
if dfs(i + 1, child): return True
return False
else:
if c not in curr.children: return False
curr = curr.children[c]
return curr.end
return dfs(0, self.root)暴力破解代码(剧透保护)
暴力破解代码(剧透保护)
class WordDictionaryBrute:
def __init__(self):
self.words = set()
def addWord(self, word):
self.words.add(word)
def search(self, word):
if '.' not in word: return word in self.words
for w in self.words:
if len(w) == len(word):
match = True
for i in range(len(word)):
if word[i] != '.' and word[i] != w[i]:
match = False; break
if match: return True
return FalseAlgorithm Pattern Checklist
When dealing with Trie data patterns.
- Are constraints clear?
- Is there a linear or logarithmic optimization possible?
PyRun is built and maintained by an independent solo developer. If this helped your interview prep, consider buying a coffee!
推荐的 Python 资源
通过相关的交互式教程、备忘单和代码比较来扩展您的知识。
Python 尝试/例外和错误处理
防止 Python 脚本崩溃。了解 try、 except、finally 块以及如何正确引发自定义异常。
如何在Python中生成随机数(random模块)
了解如何在 Python 中生成随机数。将 randrange、randint 和均匀浮点生成与播种控制进行比较。
Python pip 包管理器备忘单
pip 命令行参考指南。学习安装、升级、卸载和管理 Python 包和依赖项。
Python 与 JavaScript:哪种编程语言最好?
Python 和 JavaScript 的全面比较。探索语法差异、性能、用例(后端与前端)和编码示例。