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

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"
http://www.xdnf.cn/news/5828.html

相关文章:

  • Baklib智能云平台加速企业数据治理
  • 桑德拉精神与开源链动2+1模式AI智能名片S2B2C商城小程序的协同价值研究
  • 01.类型转换+Scanner+制表符嫦娥例题
  • dockers笔记
  • FastDDS Transport功能模块初步整理
  • 《医院网络安全运营能力成熟度评估指南》(试行版)研究解读
  • Spring Boot 的自动配置为 Spring MVC 做了哪些事情?
  • matlab多智能体网络一致性研究
  • 【C++详解】类和对象(上)类的定义、实例化、this指针
  • C++11 ——右值引用和移动语义
  • 手动硬密封固定式对夹V型球阀:复杂介质工况下的高性价比流体控制方案-耀圣
  • 深度学习基础
  • Kotlin-类和对象
  • Angular | 利用 `ChangeDetectorRef` 解决 Angular 动态显示输入框的聚焦问题
  • Java后端开发day48--反射动态代理
  • 【速写】TRL:Trainer的细节与思考(PPO/DPO+LoRA可行性)
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】金融风控分析案例-10.4 模型部署与定期评估
  • 虹科技术 | 简化汽车零部件测试:LIN/CAN总线设备的按键触发功能实现
  • C/C++内存管理
  • const char* 指向字符串数组和字符串的区别
  • css3基于伸缩盒模型生成一个小案例
  • 华三路由器单臂路由配置
  • 数字IC后端培训教程之数字后端项目典型案例分析
  • Spring Boot 的 CommandLineRunner
  • 【爬虫】12306查票
  • android特许权限调试
  • 特伦斯折叠重锤V70:实现专业演奏,从这里开始
  • DES两种加密模式
  • 普林斯顿数学三剑客读本分析。
  • element ui 实现el-form表单校验不通过时自动滚动到不通过的第一项去