LeetCode 每日一题笔记0. 前言日期2026.04.22题目2452. 距离字典两次编辑以内的单词难度中等标签数组、字符串、字典树1. 题目理解问题描述给你两个字符串数组queries和dictionary所有单词均为小写字母且长度相同。一次编辑指将单词中任意一个字母修改为其他字母。返回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 时提前终止比较。算法步骤初始化结果列表遍历queries中的每个单词q对每个q遍历dictionary中的每个单词dic逐位比较q和dic统计差异字符数若差异字符数 2提前终止当前dic的比较若存在任意dic使差异字符数 ≤ 2将q加入结果列表并跳出字典循环遍历完成后返回结果列表。3. 代码实现packagelc2452;importjava.util.ArrayList;importjava.util.List;classSolution{publicListStringtwoEditWords(String[]queries,String[]dictionary){ListStringansnewArrayList();for(inti0;iqueries.length;i){for(Stringdic:dictionary){intcount0;for(intj0;jqueries[i].length();j){if(queries[i].charAt(j)!dic.charAt(j)){count;}if(count2){break;}}if(count2){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 时立即终止当前字典词的比较避免冗余计算对于中等规模的输入暴力解法已足够高效大规模场景可考虑字典树或哈希变体优化。关键点回顾题目中的“编辑距离”仅包含字符替换无需考虑插入/删除差异字符数统计可提前终止大幅减少比较次数结果列表需保持与queries原顺序一致不可排序后返回。