InterviewGuide 精选力扣 300+ 题解析:720. 词典中最长的单词(哈希表 + 排序前缀判定)
教程【免费下载链接】InterviewGuide「InterviewGuide」是阿秀从校园-职场多年计算机自学过程的记录以及学弟学妹们计算机校招秋招经验总结文章的汇总包括但不限于C/C 、Golang、JavaScript、Vue、操作系统、数据结构、计算机网络、MySQL、Redis等学习总结坚持学习持续成长项目地址https://gitcode.com/gh_mirrors/in/InterviewGuide点击查看免费下载本篇技术解析基于 InterviewGuide 仓库中 哈希表模块 的经典 Easy 题「720. 词典中最长的单词」LeetCodeLongest Word in Dictionary整理而成完整代码收录于 720.词典中最长的单词.md。文章将带你吃透逐步添加字母构词的判定逻辑掌握排序 哈希集合的高效解法并深入理解其中一处决定成败的排序比较器设计技巧这套思路在校招笔试与面试手写算法中非常实用。题目描述给出一个字符串数组words组成的一本英语词典。从中找出最长的一个单词该单词是由words词典中其他单词逐步添加一个字母组成。若其中有多个可行的答案则返回答案中字典序最小的单词。若无答案则返回空字符串。换句话说合法的候选单词w必须满足w的所有前缀去掉末尾一个字符后得到的字符串都存在于词典中并且这些前缀本身也是可以继续向前剥壳的最终可以剥到一个长度为 1 的单词。因为词典中的单词全部由其他单词逐步添加一个字母而来所以w的长度为 1、2、…、|w|-1的所有前缀都必须完整地出现在words中。示例 1输入: words [w,wo,wor,worl, world] 输出: world 解释: 单词world可由w, wo, wor, 和 worl添加一个字母组成。world的前缀依次为worl、wor、wo、w全部存在于词典中因此合法而它又是词典中最长的单词所以直接作为答案返回。示例 2输入: words [a, banana, app, appl, ap, apply, apple] 输出: apple 解释: apply和apple都能由词典中的单词组成。但是apple的字典序小于apply。这里出现了两个长度相同的候选单词apply和appleapply的前缀appl、app、ap、a都在词典中apple同样满足。由于题目要求返回字典序最小的单词因此答案是apple而非apply。至于banana它的前缀banan等并不在词典中直接出局。约束条件所有输入的字符串都只包含小写字母共 26 个小写字母words数组长度范围为[1, 1000]words[i]的长度范围为[1, 30]。单词最大长度只有 30、数组最大长度 1000因此即便是朴素的前缀枚举 集合查找也能在限定数据规模下高效运行这正是本题能归入 Easy 等级的原因之一。解题思路拆解这道题的核心难点有三个前缀链式判定一个单词合法要求它的全部前缀都出现在词典中且这些前缀自身也要逐层成立。长度优先在多个合法单词中先取长度最长的。字典序兜底长度相同的情况下取字典序最小的。一个很自然的想法是先按长度从长到短考察长度相同时按字典序从小到大考察第一个找到的合法单词就是答案。实现时为了省去复杂的多层排序可以反向思考——把单词按长度升序、同长字典序降序排序然后从数组末尾往前遍历此时最先遇到的合法单词恰好就是最长且字典序最小的候选。第一版解法排序 哈希集合仓库收录解法仓库中收录的正是这一版解法作者标注看了提示其实并没有什么窍门但代码中隐藏着一处非常关键的排序技巧。bool compareSize(const string a, const string b) { if(a.size()!b.size()) return a.size() b.size(); else { return a b;//当size一样时字典序小的在后面这一点很厉害 } } string longestWord(vectorstring words) { sort(words.begin(), words.end(), compareSize); unordered_setstring unst; for (auto a : words) { unst.insert(a); } string result; for (int iwords.size()-1; i 0;--i) {//从后往前走 result words[i]; int len result.size(); while (len--) { result.pop_back(); if (unst.find(result) unst.end()) break; } if (len 0) { result words[i]; break; } } return result; }比较器设计一处反直觉的排序if (a.size() ! b.size()) return a.size() b.size(); // 长度短的在前 else return a b; // 长度相同时字典序大的在前乍看之下return a b似乎写反了正常应取字典序升序但结合后面从数组末尾往前遍历的逻辑就豁然开朗了排序完成后数组整体按长度升序排列长度相同的单词内部按字典序降序排列于是同一长度内字典序最小的单词恰好排在最末尾从末尾倒序扫描时先遇到的自然是长度最长、且同长中字典序最小的单词。这样只需一次遍历就能同时满足最长优先和字典序最小优先两个目标无需额外维护答案的优先级比较是这段代码的精髓所在。前缀链判定的执行细节对于当前考察的单词result用len记录其长度然后进入while (len--)循环每次循环先把len减 1同时pop_back()去掉result的最后一个字符得到去掉末尾后的前缀在哈希集合unst中查找该前缀若不存在则立即break说明该单词不是合法候选循环完全执行完毕后len恰好自减为 0此时说明单词的所有非空前缀长度 1 到size-1都已通过集合校验该单词合法。这里有个容易误读的细节while (len--)是先判断len是否为 0 再进入循环体循环内len已经先自减。假设单词长度为 5则会依次检查长度为 4、3、2、1 的前缀最后一次循环len从 1 自减为 0 时result已经pop_back为空字符串而空串必然不在词典中单词长度下限为 1于是必然break并得到len 0。因此if (len 0)成立等价于该单词的所有非空前缀都存在于词典中判定逻辑严密自洽。找到第一个合法单词后立即break返回因为它已经是最长 字典序最小的答案若整个数组扫描完毕都没有合法单词result维持初始值空字符串恰好符合题目无答案则返回空字符串的要求。复杂度分析时间复杂度排序最坏为 O(n·log n·L)n 为单词个数L 为单词平均长度字符串比较本身需要 O(L)构建unordered_set为 O(n·L)倒序遍历中每个单词最多被逐层剥壳 L 次最坏 O(n·L)。整体在题目的数据规模n ≤ 1000L ≤ 30下非常轻量。空间复杂度unordered_set存储全部单词为 O(n·L)。作者在该版本的提交记录中标注执行用时 44 ms在所有 C 提交中击败了 99.73% 的用户内存消耗 16.2 MB击败了 89.41% 的用户。需要说明的是这是当时提交环境下的历史数据实际性能会随评测机与用例波动核心价值在于算法思路本身。边界情况与自测用例为了保证解法正确建议用以下几类用例自测无合法答案words [a, b, c]——没有任何单词能由其他单词逐步添加字母构成应返回空字符串单元素词典words [a]——a没有可依赖的前缀同样返回同长多候选示例 2 中的[apply, apple]场景验证字典序最小的apple被选中最长的单词并不合法words [a, aa, ab, aab]——aab虽然最长但前缀ab不在词典中因此正确答案是aa前缀a存在。延伸思考能否用 Trie前缀树求解本题的另一种经典思路是使用字典树 / 前缀树Trie先把所有单词插入 Trie然后从根节点出发做 DFS每深入一层就在节点上记录当前路径对应的单词是否完整出现在词典中只允许沿着词尾节点继续向下走最终找到深度最大、且同深度下字典序最小的路径即答案。该做法与本题前缀链语义天然契合时间复杂度为 O(n·L)。需要指出的是当前 InterviewGuide 仓库的 LeetCode 题解集中暂未收录 Trie 解法的完整实现哈希表分册下也以哈希 排序 / 计数为主因此这里仅作为思路延伸具体代码请结合你自己的 Trie 实现练习完成。与仓库哈希表模块其他题解的呼应本题在 哈希表 easy 汇总页 中与多道字符串 哈希题目并列刷题时可串联对比互为佐证884. 两句话中的不常见单词用unordered_map做词频计数与本题前缀是否出现过的集合判定形成计数 vs 存在性的对比648. 单词替换同样围绕前缀展开用unordered_set边累积字符边查前缀是本题前缀判定思路的进阶应用692. 前 K 个高频单词同样需要在频率优先 字典序兜底的双重排序下做选择与本题长度优先 字典序兜底的排序哲学一脉相承非常值得对照学习。小结720. 词典中最长的单词是一道把哈希集合查前缀与排序比较器技巧结合得恰到好处的经典题。仓库收录的解法用长度升序 同长字典序降序的排序配合从尾部倒序扫描一次遍历同时解决最长优先与字典序最小两个约束while (len--)与空串必然查不到的特性又让前缀链判定写得极其精简。建议在理解上述推导后脱离题解独立手写一遍并尝试用 Trie 再实现一次彻底掌握前缀链类题目的通用套路。赞分享教程【免费下载链接】InterviewGuide「InterviewGuide」是阿秀从校园-职场多年计算机自学过程的记录以及学弟学妹们计算机校招秋招经验总结文章的汇总包括但不限于C/C 、Golang、JavaScript、Vue、操作系统、数据结构、计算机网络、MySQL、Redis等学习总结坚持学习持续成长项目地址https://gitcode.com/gh_mirrors/in/InterviewGuide点击查看免费下载相关推荐InterviewGuide 哈希表专题LeetCode 720「词典中最长的单词」——排序 哈希集合判定前缀链InterviewGuide 哈希表专题LeetCode 720「词典中最长的单词」——排序 哈希集合判定前缀链 本篇技术指南围绕 InterviewGu文档教程知识库692. 前 K 个高频单词哈希表统计 堆/排序的 Top K 经典解法InterviewGuide 力扣刷题笔记692. 前 K 个高频单词哈希表统计 堆/排序的 Top K 经典解法InterviewGuide 力扣刷题笔记 本文是《InterviewGuid文档教程知识库LeetCode 720 词典中最长的单词哈希表模拟与字典树双解法实战解析LogicStack-LeetCode 题解精读LeetCode 720 词典中最长的单词哈希表模拟与字典树双解法实战解析LogicStack LeetCode 题解精读 本文是「宫水三叶的刷题日记」刷教程文档上一篇Stable Diffusion for BlenderDream Textures的未来演进与社区共建下一篇跨语言gRPC实战指南Go、Node.js、Java多场景开发解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

C/C++集成开发环境编译速度变慢原因及解决方法

C/C++集成开发环境编译速度变慢原因及解决方法

C/C集成开发环境编译速度变慢原因及解决方法 现象描述“之前几秒钟可以编译完成的工程,现在需要几分钟才能编译完成”“编译时进度条过会儿就会卡住不动,需要等待十多分钟才能编译完成”“MRS, Keil,Vitis等多款集成开发环境都有不同程度的编…

2026/10/13 9:18:41 阅读更多 →
teams-for-linux 下载管理器:从“静默下载“到可见反馈的完整实现

teams-for-linux 下载管理器:从“静默下载“到可见反馈的完整实现

桌面应用即时通讯 【免费下载链接】teams-for-linux Unofficial Microsoft Teams for Linux client 项目地址: https://gitcode.com/gh_mirrors/te/teams-for-linux 点击查看 免费下载 本文基于 teams-for-linux(非官方 Microsoft Teams Linux 客户端&a…

2026/10/13 9:18:41 阅读更多 →
AIGC创作训练营:从工具堆砌到工作流思维,构建高效创作流水线

AIGC创作训练营:从工具堆砌到工作流思维,构建高效创作流水线

1. 这个训练营到底在解决什么问题第一次看到“闪学it-AI-AIGC创作训练营”这个标题,我脑子里蹦出来的第一个念头是:又是一个蹭AIGC热度的课?但仔细拆解一下,它其实踩中了一个非常具体的痛点——会用AI工具的人很多,但能…

2026/10/13 9:17:38 阅读更多 →

最新新闻

用层次分析法(AHP)科学决策就业选择

用层次分析法(AHP)科学决策就业选择

1. 为什么就业选择不能只靠“感觉”和“听说”刚带完一届毕业设计,有位A同学连续三周来找我聊就业方向:一会儿说“听说算法岗钱多”,一会儿又焦虑“听说现在卷得不行”,最后拿出一张密密麻麻的Excel表,列了8家公司的岗…

2026/10/13 10:01:17 阅读更多 →
ICO头像制作与设置全指南:从选图到兼容性避坑

ICO头像制作与设置全指南:从选图到兼容性避坑

简介:关于ico小头像(即favicon)设置的实用指南,面向网站运营者、博客博主及前端入门用户,旨在解决站点图标缺失或显示异常的问题。文档围绕favicon的完整配置流程展开:先设计并生成16x16、32x32、64x64等多…

2026/10/13 10:01:17 阅读更多 →
编码智能体决策层实践:双引擎分工降低延迟与Token消耗

编码智能体决策层实践:双引擎分工降低延迟与Token消耗

我一直在折腾一个叫 Jev 的编码智能体,做的事情简单说就是:让程序自己读仓库、改代码、跑测试、修问题。前两版跑下来,我发现最头疼的还真不是模型不会写代码,而是它太能“纠结”了。每走一步都要反复权衡:先看哪个文件…

2026/10/13 10:01:17 阅读更多 →
【安防AI工程实战系列五】AI智能摄像常见报错、终极排查与避坑指南

【安防AI工程实战系列五】AI智能摄像常见报错、终极排查与避坑指南

AI智能摄像常见报错、终极排查与避坑指南 在AI智能摄像头、机器视觉、边缘AI部署项目中,绝大多数开发者遇到的问题不是算法不准,而是环境报错、画面异常、推理卡顿、告警失效。很多项目代码没问题、模型没问题,最终卡死在设备调用、流传输、…

2026/10/13 10:01:17 阅读更多 →
MP4网页播放一直转圈?先看200还是206

MP4网页播放一直转圈?先看200还是206

我会先留住网页里一直转圈的那份 MP4,再确认网站把它怎样送到了播放器。重新导出也会换掉排查对象。这次本地复现中的同一份视频没有重新编码。仅改变服务器对请求的处理方式就让首帧等待中位数从 5.782 秒变成了 0.795 秒。文件还没动,现象已经变了。 …

2026/10/13 10:01:17 阅读更多 →
PowerContext挂接MiniMax Code:终结跨会话与跨Agent上下文断裂

PowerContext挂接MiniMax Code:终结跨会话与跨Agent上下文断裂

大约两个星期前,我把手头的项目从“上下文完全靠每次手动贴”的方式,切到了 PowerContext 挂接 MiniMax Code 的方式。困扰我很久的一个问题终于不再是问题:跨会话和跨 Agent 之间的项目上下文,不再断裂了。起因很简单。我开一个新…

2026/10/13 10:00:16 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →