当前位置: 首页 > news >正文

LeetCode 648 单词替换题解

LeetCode 648 单词替换题解

题目描述

题目链接
在英语中,我们有一个叫做「词根」的概念,可以缩短其他单词的长度。给定一个词典和一句话,将句子中的所有单词用其最短匹配词根替换。

解题思路

哈希表 + 前缀匹配法

  1. 预处理词典:将词典存入哈希表实现O(1)查找
  2. 最短匹配优先:对每个单词检查所有可能前缀
  3. 动态替换:找到第一个匹配的前缀立即替换

代码实现

from typing import Listclass Solution:def replaceWords(self, dictionary: List[str], sentence: str) -> str:# 将词典存入集合实现快速查找(O(1)时间复杂度)root_set = set(dictionary)  # 空间复杂度 O(n)# 分割句子为单词列表(O(m)时间复杂度,m为单词数)words = sentence.split()# 遍历每个单词进行替换(O(m*l)时间复杂度,l为单词平均长度)for i in range(len(words)):# 检查所有可能前缀(从最短开始)for j in range(1, len(words[i])):  # 注意:词根至少1个字符# 发现匹配立即替换并终止检查if words[i][:j] in root_set:words[i] = words[i][:j]break  # 保证替换最短匹配词根# 重新组合为句子(O(m)时间复杂度)return ' '.join(words)
if __name__ == "__main__":# 测试用例test1 = Solution().replaceWords(["cat", "bat", "rat"], "the cattle was rattled by the battery")  # "the cat was rat by the bat"test2 = Solution().replaceWords(["a", "b", "c"], "aadsfasf absbs bbab cadsfafs")  # "a a b c"print(test1)  # 输出:"the cat was rat by the bat"print(test2)  # 输出:"a a b c"

相关文章:

  • 第九届御网杯网络安全大赛初赛WP
  • [Java][Leetcode middle] 45. 跳跃游戏 II
  • 开发与AI融合的Windsurf编辑器
  • Linux学习心得问题整理(一)
  • MySQL——数据类型表的约束
  • 设计模式深度解析:AI大模型下的策略模式与模板方法模式对比解析
  • Kafka Go客户端--Sarama
  • OpenCV进阶操作:风格迁移以及DNN模块解析
  • 基于STM32、HAL库的TDA7719TR音频接口芯片驱动程序设计
  • 基于Win在VSCode部署运行OpenVINO模型
  • MySQL 8.0 OCP 1Z0-908 题目解析(2)
  • 基于STM32、HAL库的ADAU1701JSTZ音频接口芯片驱动程序设计
  • Windows部署LatentSync唇形同步(字节跳动北京交通大学联合开源)
  • 仓颉Magic亮相GOSIM AI Paris 2025:掀起开源AI框架新热潮
  • 初始“协议”
  • golang 定时器
  • 软件测试——面试八股文(入门篇)
  • React vs Vue:点击外部事件处理的对比与实现
  • 深入理解 TypeScript 的 Partial<T> 类型
  • 菜狗的脚步学习
  • 走进“双遗之城”,领略文武风采:沧州何以成文旅新贵
  • 从这些电影与影像,看到包容开放的上海
  • 中美大幅下调超100%关税,印巴四日“战争”复盘|907编辑部
  • 全国汽车以旧换新补贴申请量突破1000万份
  • 消费维权周报|上周涉手机投诉较多,涉拍照模糊、屏幕漏液等
  • IPO周报|本周A股暂无新股网上申购,年内最低价股周二上市