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

LeetCode 每日一题笔记 日期:2026.04.22 题目:2452. 距离字典两次编辑以内的单词

LeetCode 每日一题笔记

0. 前言

  • 日期:2026.04.22
  • 题目:2452. 距离字典两次编辑以内的单词
  • 难度:中等
  • 标签:数组、字符串、字典树

1. 题目理解

问题描述
给你两个字符串数组queriesdictionary,所有单词均为小写字母且长度相同。一次编辑指将单词中任意一个字母修改为其他字母。返回queries中,与dictionary中任意单词的编辑距离不超过 2 的单词列表,顺序与原queries保持一致。

示例

输入:queries = ["word","note","ants","wood"], dictionary = ["wood","joke","moat"]
输出:["word","note","wood"]
解释:

  • “word” 修改 1 次可得到 “wood”;
  • “note” 修改 2 次可得到 “joke”;
  • “ants” 无法在 2 次编辑内匹配字典中的单词;
  • “wood” 无需修改即可匹配字典中的单词。

2. 解题思路

核心观察

  • 题目中的“编辑距离”仅包含字符替换,不考虑插入/删除,且所有单词长度相同;
  • 对每个query,只需找到字典中任意一个单词,两者的不同字符数 ≤ 2,即可将该query加入结果;
  • 可直接暴力比较,对每个query和字典单词逐位统计差异字符数,差异超过 2 时提前终止比较。

算法步骤

  1. 初始化结果列表;
  2. 遍历queries中的每个单词q
  3. 对每个q,遍历dictionary中的每个单词dic
    • 逐位比较qdic,统计差异字符数;
    • 若差异字符数 > 2,提前终止当前dic的比较;
    • 若存在任意dic使差异字符数 ≤ 2,将q加入结果列表并跳出字典循环;
  4. 遍历完成后返回结果列表。

3. 代码实现

packagelc2452;importjava.util.ArrayList;importjava.util.List;classSolution{publicList<String>twoEditWords(String[]queries,String[]dictionary){List<String>ans=newArrayList<>();for(inti=0;i<queries.length;i++){for(Stringdic:dictionary){intcount=0;for(intj=0;j<queries[i].length();j++){if(queries[i].charAt(j)!=dic.charAt(j)){count++;}if(count>2){break;}}if(count<=2){ans.add(queries[i]);break;}}}returnans;}}

4. 代码优化说明

优化点1:哈希表预处理(无重复字典词时可选)

将字典单词存入哈希集合,对每个query生成所有 0/1/2 次编辑的变体,检查是否存在于集合中,适用于字典较大的场景(但生成变体的复杂度较高,需权衡)。

优化点2:字典树(Trie)优化

构建字典树存储所有字典单词,对每个query进行深度优先搜索,限制编辑次数 ≤ 2,适用于字典规模较大的场景,可减少重复字符比较。

优化点3:提前终止

原代码已实现差异字符数 > 2 时提前终止当前字典词的比较,避免不必要的遍历,是暴力解法中效率较高的实现。

5. 复杂度分析

  • 时间复杂度O(Q×D×L)O(Q \times D \times L)O(Q×D×L)

    • QQQqueries的长度;
    • DDDdictionary的长度;
    • LLL:单词的平均长度;
    • 最坏情况下,每个query需与所有字典词比较,每个比较遍历整个单词长度。
  • 空间复杂度O(1)O(1)O(1)(不包含结果列表的额外空间)

    • 仅使用常量级临时变量存储差异计数,无额外数据结构开销。

6. 总结

  • 核心思路是暴力比较 + 提前终止,利用题目限制(仅替换编辑、长度相同)简化问题;
  • 关键技巧:差异字符数超过 2 时立即终止当前字典词的比较,避免冗余计算;
  • 对于中等规模的输入,暴力解法已足够高效;大规模场景可考虑字典树或哈希变体优化。

关键点回顾

  1. 题目中的“编辑距离”仅包含字符替换,无需考虑插入/删除;
  2. 差异字符数统计可提前终止,大幅减少比较次数;
  3. 结果列表需保持与queries原顺序一致,不可排序后返回。
http://www.jsqmd.com/news/684140/

相关文章:

  • 穿透式监管落地,这6种穿透式监管模式你选对了吗?
  • 保姆级教程:用海康SDK的NET_DVR_GetDeviceConfig实现智能安防布防(Java版)
  • 【YOLOv11】029、YOLOv11的推理优化:NMS、DIoU-NMS与快速推理技巧
  • 告别Keil/IAR:用Ozone+J-Trace调试STM32F407,这些隐藏功能真香了
  • 免费音频转换神器fre:ac:5分钟学会专业级音乐格式转换
  • Chain 在微服务架构中的落地模式
  • 如何3分钟掌握智能马赛克处理:DeepMosaics完整实战指南
  • 从专有硬件到软件定义:网络功能虚拟化(NFV)的核心变革与实践
  • 高效工作利器:PowerToys中文完整汉化版深度解析指南
  • 告别有限元!用PyTorch手把手实现Deep Ritz Method求解偏微分方程(附代码)
  • 别再只设相同SSID了!手把手教你用爱快/TP-Link AC+AP搭建真·无缝漫游家庭网络(附802.11k/v/r协议检查指南)
  • G1800 G2800 G3800 G3000 IP8780 IP6700 TS3380 ix6780 MG3580 MG3680 TS5080 清零软件,5B00,P07,E08,亲测软件好用
  • 计算机毕业设计:Python股票市场智能分析与LSTM预测系统 Flask框架 TensorFlow LSTM 数据分析 可视化 大数据 大模型(建议收藏)✅
  • Qt Quick Scene Graph 实战:手把手教你用 C++ 自定义一个带颜色的线段组件(附完整源码)
  • 金融级Docker安全配置不是选配项:为什么2024年起所有新上线支付类容器必须启用--userns-remap+只读根文件系统+no-new-privileges?
  • 从Photoshop滤镜到代码:用Python+OpenCV的cv2.filter2D复刻经典‘马赛克’和‘油画’艺术效果
  • Docker+Kubernetes国产化栈终极选型对比(龙蜥Anolis OS vs 欧拉openEuler vs 中标麒麟):性能压测数据+等保审计支持度+厂商服务SLA三维度权威评测
  • Inpaint 图片去水印软件下载和使用教程 支持去除豆包水印
  • CDecrypt技术实现:深入解析Wii U NUS内容解密算法与架构设计
  • 【YOLOv11】030、YOLOv11模型轻量化:MobileNet、ShuffleNet等轻量Backbone替换
  • 5G NR网络优化实战:手把手教你配置CSI报告,提升下行速率(含PUCCH/PUSCH选择指南)
  • Adobe-GenP 3.0:Adobe全家桶通用补丁终极指南
  • OBS高级计时器:6种专业模式精准掌控直播时间
  • c++ 协程的上下文切换 c++协程挂起时保存了哪些信息
  • GitHub 热榜项目 - 日榜(2026-04-21)
  • LangChain4j 1.4.0实战:5分钟搞定多模态AI服务开发(附Java代码)
  • Nanbeige4.1-3B部署案例:Kubernetes集群中以StatefulSet部署3B模型服务
  • 免费开源的WPS AI插件 察元AI助手:能力策略:风险类别与默认命名空间
  • 完整指南:LRCGet批量歌词下载与管理工具高效方案
  • 【YOLOv11】031、YOLOv11模型大型化:ResNet、EfficientNet等大型Backbone替换