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"
相关推荐
Keven_114 小时前
AcWing算法提高课思路速查:搜索
算法·搜索
沙蒿同学5 小时前
当古诗词遇上 AI:从 38 万句诗词中取一个好名字
python·算法·架构
变量未定义~5 小时前
单调栈、单调队列(模板)、子矩阵(模板)
数据结构·算法·蓝桥杯
不会就选b5 小时前
算法日常・每日刷题--<快速排序>2
数据结构·算法
CClaris5 小时前
大模型量化从0到1(五):GPTQ 原理详解 + 从零量化一个真实大模型
人工智能·python·算法·机器学习
凯瑟琳.奥古斯特5 小时前
力扣1012数位DP解法详解
开发语言·c++·算法·leetcode·职场和发展
大鱼>6 小时前
AI+货物追踪:贵重物品智能追踪系统
人工智能·深度学习·算法·机器学习
大鱼>6 小时前
AI+货物追踪:集装箱智能追踪系统
人工智能·深度学习·算法·机器学习
z小猫不吃鱼6 小时前
模型剪枝经典论文精读:NISP: Pruning Networks using Neuron Importance Score Propagation
算法·机器学习·剪枝
researcher-Jiang6 小时前
栈的模板类与基本应用(还差栈混洗)
算法