【Leetcode Daily】720词典中最长的单词
发表于|更新于|力扣日常 | LeetcodeDaily
|总字数:398|阅读时长:1分钟|浏览量:
题目浅析
想查看原题可以点击题目链接。
简单地说,就是给一个词典,规定合法的单词是存在另一个单词右侧加一个字母所得(单字母直接合法),求合法单词中长度最长且字典序最小的。
思路分享
本题有个没有明说的要求,是要必须从单字母开始,如果有一个 rm,还是没有 r,那么 rm 后面衍生的都不合法。
老样子,通过哈希表和切片可以实现快速查找一个单词的前缀是否存在。此外,通过字典树则能直接往后筛选,参考题解是一边建树一边筛选记录,实际上也可以先把字典树建好,然后用单字母路线向下遍历,需要整条路线都是末节点才算是合法答案(即都是一个个字母加起来的)
代码解答(强烈建议自行解答后再看)
- 参考题解
1 | class Solution: |
文章作者: 陆爻齐-LuYaoQi
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LuYaoQi's Blogs!
相关推荐

2025-12-22
【Leetcode Daily】208实现Trie(前缀树)
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个字符串数组,并且逐个做 insert 或者 search 操作,还有判断搜索是否为前缀。 思路分享 题目的需求就是经典的字典树可以做到的事,现如今的关键词提示也有用到其中原理。字典树可以看作多叉树,不过每个节点可能会存些信息辅助查询搜索,有的节点可能是代表一个单词的末尾,也可能代表单词的中间。 https://leetcode.cn/problems/implement-trie-prefix-tree/solutions/2993894/cong-er-cha-shu-dao-er-shi-liu-cha-shu-p-xsj4/ 代码解答(强烈建议自行解答后再看) 参考题解 123456789101112131415161718192021222324252627282930313233343536373839class Node: __slots__ = "son", "end" def __init__(self): self.son...

2025-12-22
【Leetcode Daily】3597分割字符串
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个字符串,从中按规则从左到右分出互不相同的段。 思路分享 本题通过哈希表也能快速去重来分别互不相同的段,不过通过字典树也能实现,在 python 能轻松地通过 dict 模拟每个节点(在不需要其它辅助信息的时候) https://leetcode.cn/problems/partition-string/solutions/3710991/an-ti-yi-mo-ni-ha-xi-ji-he-pythonjavacgo-p761/ 代码解答(强烈建议自行解答后再看) 参考题解 1234567891011121314class Solution: def partitionString(self, s: str) -> List[str]: ans = [] cur = root = {} left = 0 for i, c in enumerate(s): if c not in cur: ...

2025-12-23
【Leetcode Daily】648单词替换
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个词典,这个词典是一系列词根(前缀),现在给一个字符串,请把其中所有的可由词典词根衍生的单词还原为词根。 思路分享 普通方法,通过哈希来检验每个单词的前面是否在词典中;字典树则是利用其查找,遍历每个单词的字符,一旦遇到某个词根的前缀就直接还原。 以及其实可以不用定义 Node 类,可以像官方题解一样,在末端的 son 加一个不寻常的字符,比如 # 来代表此处为某个词的末端。 https://leetcode.cn/problems/replace-words/solutions/1649109/dan-ci-ti-huan-by-leetcode-solution-pl6v/ 代码解答(强烈建议自行解答后再看) 参考题解 12345678910111213141516171819202122232425262728293031323334class Node: def __init__(self): self.son = {} self.end =...

2025-08-13
【Leetcode Daily】1003检查替换后的词是否有效
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个字符串,该字符串是从一个空字符串开始,不断插入“abc”形成的,这个插入是从字符串的任意处都可以行动。 思路分享 这个题目和实际的题意完全不是一个意思,坏。不过这个不重要。 发现做栈,只要把握一点,就是何时弹栈。例如本题,只要意识到,弹栈的时候,正在遍历的字母是 c,栈顶有 a 和 b,就轻松地写出了条件。 这个条件应该不是最快的,因为只要中间的 abc 有一处无法正确匹配,就可以算是检测不过关,所以更快的思路应该是按照正在遍历的 abc 三种情况,分别检测栈是否符合“正常”。 https://leetcode.cn/problems/check-if-word-is-valid-after-substitutions/solutions/2253773/zhan-jian-ji-xie-fa-pythonjavacgo-by-end-i9o7/ 本题不断插入 abc,并要求检测是否都是...

2025-05-08
【Leetcode Daily】1004最大连续1的个数III
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个由 0 和 1 组成的整数数组,现在最多可以把其中 k 个 0 反转成 1。求反转后最长连续 1 的个数。 思路分享 纯粹的不定长滑动窗口(【Leetcode Daily】3090每个字符最多出现两次的最长字符串),无需多盐。 代码解答(强烈建议自行解答后再看) 陆爻齐的解法 1234567891011121314151617class Solution {public: int longestOnes(vector<int>& nums, int k) { int zero_count = 0; int left = 0; int n = nums.size(); int ans = 0; for (int i = 0; i < n;i++) { zero_count += 1-nums[i]; while(zero_count...

2025-08-19
【Leetcode Daily】1021删除最外层的括号
题目浅析 想查看原题可以点击题目链接。 简单地说,就是按照题目规定的“原语”来分解有效的括号字符串,要求去掉最外面的一层括号。 思路分享 通过栈记录可以判定当前的括号是否为最外层。具体方法是记录符号时,如果栈内有括号,说明不是最外层,就记录到结果中,否则就只压栈。 https://leetcode.cn/problems/remove-outermost-parentheses/solutions/1520365/shan-chu-zui-wai-ceng-de-gua-hao-by-leet-sux0/ 代码解答(强烈建议自行解答后再看) 参考题解 123456789101112131415class Solution: def removeOuterParentheses(self, s: str) -> str: res, stack = "", [] for c in s: print(res) print(stack) ...
公告
希望你我都能得偿所愿
PS:相对流水账的文章只能在归档找得到
系列文章
