LeetCode 648 单词替换题解

LeetCode 648 单词替换题解

题目描述

题目链接

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

解题思路

哈希表 + 前缀匹配法

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

代码实现

python 复制代码
from typing import List

class 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"
相关推荐
hetao173383721 分钟前
2026-08-21~23 hetao1733837 的刷题记录
c++·算法
青 春 记 忆1 小时前
LeetCode 206. 反转链表|Python 解法详解
python·leetcode·链表
CQU_JIAKE1 小时前
8.23【A】
算法
sprlightning1 小时前
LHDC V5 算法深度解析
算法·fft·lhdcv5·imdct·mdct·rice·fac
csdn_aspnet2 小时前
C# 第k个最小元素(K’th Smallest Element)
算法·c#·排序算法
BioRunYiXue2 小时前
RACE技术全攻略:从全长克隆到靶基因验证
java·javascript·网络·人工智能·科技·算法·eclipse
ZPC82102 小时前
joy 及sensor_msgs
算法
Three_ST2 小时前
沐神-动手学习深度学习-习题答案4.4模型选择,欠拟合,过拟合
人工智能·python·深度学习·学习·算法
CIO_Alliance2 小时前
AI深度系列(2)| CNN卷积池化感受野原理:从局部感知到全局视野
人工智能·深度学习·线性代数·算法·计算机视觉·企业ai转型·企业cio联盟