哈希算法题目:设计一个基于哈希的拼写检查器
字数 480 2025-11-02 00:38:37
哈希算法题目:设计一个基于哈希的拼写检查器
题目描述:
设计一个拼写检查器,能够检查单词是否在字典中存在,并支持以下操作:
- 将单词添加到字典
- 检查单词是否在字典中
- 对输入的单词提供拼写建议(返回所有与输入单词编辑距离为1的字典中存在的单词)
编辑距离为1的操作包括:
- 插入一个字符
- 删除一个字符
- 替换一个字符
- 交换相邻两个字符
解题过程:
步骤1:设计基础数据结构
使用哈希集合存储字典单词,实现快速查找
class SpellChecker:
def __init__(self):
self.dictionary = set()
步骤2:实现基本操作
def add_word(self, word):
"""将单词添加到字典"""
self.dictionary.add(word.lower())
def check_word(self, word):
"""检查单词是否在字典中"""
return word.lower() in self.dictionary
步骤3:生成编辑距离为1的所有可能单词
这是核心算法部分,需要分别处理四种操作:
3.1 生成所有可能的字符插入
def generate_insertions(self, word):
insertions = set()
for i in range(len(word) + 1):
for char in 'abcdefghijklmnopqrstuvwxyz':
new_word = word[:i] + char + word[i:]
insertions.add(new_word)
return insertions
3.2 生成所有可能的字符删除
def generate_deletions(self, word):
deletions = set()
for i in range(len(word)):
new_word = word[:i] + word[i+1:]
deletions.add(new_word)
return deletions
3.3 生成所有可能的字符替换
def generate_replacements(self, word):
replacements = set()
for i in range(len(word)):
for char in 'abcdefghijklmnopqrstuvwxyz':
if char != word[i]:
new_word = word[:i] + char + word[i+1:]
replacements.add(new_word)
return replacements
3.4 生成所有可能的相邻字符交换
def generate_transpositions(self, word):
transpositions = set()
word_list = list(word)
for i in range(len(word_list) - 1):
word_list[i], word_list[i+1] = word_list[i+1], word_list[i]
transpositions.add(''.join(word_list))
word_list[i], word_list[i+1] = word_list[i+1], word_list[i] # 恢复原状
return transpositions
步骤4:实现拼写建议功能
def get_suggestions(self, word):
"""获取所有编辑距离为1的正确拼写建议"""
word = word.lower()
suggestions = set()
# 如果单词本身就在字典中,返回空集合
if self.check_word(word):
return suggestions
# 生成所有可能的编辑距离为1的单词
all_candidates = (self.generate_insertions(word) |
self.generate_deletions(word) |
self.generate_replacements(word) |
self.generate_transpositions(word))
# 过滤出在字典中存在的单词
for candidate in all_candidates:
if candidate in self.dictionary:
suggestions.add(candidate)
return suggestions
步骤5:优化性能考虑
为了避免重复计算和提高效率,可以添加缓存机制:
def __init__(self):
self.dictionary = set()
self.suggestion_cache = {} # 缓存拼写建议
def get_suggestions(self, word):
word = word.lower()
if word in self.suggestion_cache:
return self.suggestion_cache[word]
if self.check_word(word):
self.suggestion_cache[word] = set()
return set()
# ... 之前的实现逻辑
self.suggestion_cache[word] = suggestions
return suggestions
def add_word(self, word):
word = word.lower()
self.dictionary.add(word)
self.suggestion_cache.clear() # 添加新单词时清空缓存
步骤6:处理边界情况
- 空字符串输入
- 大小写不敏感处理
- 特殊字符处理(题目假设只处理小写字母)
这个拼写检查器利用了哈希集合的O(1)查找特性,能够快速检查单词是否存在并提供拼写建议,是哈希算法在实际应用中的一个典型例子。