题目描述
思路解析动画文字版
朴素想法:把字符串两两比公共开头、再取交集,反复比较还纠结拿哪个词当基准。有更清爽的办法:直接竖着对齐、一列一列检查。
为什么成立:公共前缀必然是每一列上所有词都相同的那段连续字符。拿第 0 个词当基准,逐列检查其余词的同位字符是否都和基准一样;只要有一个不同、或某个词已到头,就立刻停,前面对齐的部分就是答案。
准备 · 以首词 "flower" 逐列:把三个词竖着摞起来。台上这行是基准词 "flower",列指针 cur 指向第 0 列,准备看 flow、flight 在这一列是不是也和基准一样。
第 0 列 · 三词都是 f ✓:第 0 列:flow 首字母是 f、flight 也是 f,和基准 flower 的 f 一样。这一列纳入公共前缀,cur 前移。
第 1 列 · 三词都是 l ✓:第 1 列:三个词都是 l,仍然一致。公共前缀长到 "fl",cur 继续前移到第 2 列。
第 2 列 · cur 前移,基准是 o:前两列都对齐,cur 前移到第 2 列。基准 flower 这一位是 o,接下来逐个看其余词在这一列是不是也都是 o。
第 2 列 · 先比 flow ✓:先看 flow,flow[2] 也是 o,和基准对得上,暂时没分歧。继续看下一个词 flight。
第 2 列 · flight 撞车,停!✗:转折:再看 flight,flight[2] 是 i,和基准的 o 不相等!这一列出现分歧——立刻停下,第 2 列往后全部作废。这就是 "一列不齐即止"。
结果 · 公共前缀 "fl":在第 2 列断开,截取基准词已对齐的前 2 位:"fl",就是最长公共前缀。
公共前缀的直觉:把多个词竖着摞起来一列一列对齐,第一处不齐就是边界。这种纵向对齐思路在很多多字符串问题里都能复用。
雷区实演 · ["ab", "a"] 短串到头:真跑一个会踩坑的小例子:基准 "ab",另一个词是 "a"。第 0 列都是 a ✓;到第 1 列基准是 b,但 "a" 已经没有第 1 个字母了——i 等于它的长度,越界条件触发,立刻停,返回 "a"。这就是 "前缀不能超过最短的词"。
面试追问:三个面试高频追问:四种解法的复杂度、短串为何要判越界、串多时为何纵向更省。
迁移阶梯:练会这题后,去字符串专题里迁移:所有 "多个串比共同部分" 的题,都复用 "拿一个串当基准、逐位核对、第一处不齐即止" 这套思路。卡住可以问 AI 助教 小欧,或去通关训练里再刷两道。
边界三连:三个边界手动过一遍:单串直接返回、含空串返回空、首列就分歧返回空。再加一种 ["ab","abc"] 前缀包含关系,靠越界条件在 i=2 截断返回 "ab"。
参考代码
class Solution: def longestCommonPrefix(self, strs): if not strs: return '' for i in range(len(strs[0])): ch = strs[0][i] for s in strs[1:]: if i == len(s) or s[i] != ch: return strs[0][:i] return strs[0]复杂度
- 时间复杂度:O(S),S = 所有字符串字符总数;最坏全部相同要扫完,通常很早就在某列断开
- 空间复杂度:O(1),只用列指针与字符变量,不开额外结构(返回值不计)
可套用的代码模板
这是挖空骨架,把两个空填上你就背下来了:① 越界 = i 等于 s 的长度,② 字符不同 = s[i] 不等于 ch。骨架永远是 "空判 → 以首词逐列 → 其余词比该列 → 越界或不等就截断"。
if not strs: return '' # 空数组特判for i in range(len(strs[0])): # 以首词逐列 ch = strs[0][i] # 基准字符 for s in strs[1:]: # 其余词比该列 if ____ or ____: # ① 越界? ② 字符不同? return strs[0][:i] # 第一处不齐即截断return strs[0] # 全部通过,返回基准词易错点
面试追问把动画讲成自己的话
追问纵向、横向、分治、二分四种写法,时间复杂度各是多少?
追问遇到比 cur 短的串要停,为什么不能只判字符是否相等?
追问如果字符串数量极多、但都很短,哪种写法更省?
这道题到这就讲完了。动画和文字是同一套思路——别光看,关掉页面自己默写一遍。然后顺着主线继续:
移除元素
LeetCode 27 · 简单 · 沿着 数组 & 哈希 继续往下推进
把这道题真正学会,再走
图解算法年卡 ¥99 /年
- ✓本题每步动画的吴师兄语音讲解(全站陆续覆盖)
- ✓小欧带 8 步通关训练——追问到不看答案也能写对、能 30 秒讲给面试官听
- ✓学习报告,记录每道题的掌握程度
76k+ GitHub Star · 吴师兄开源图解算法,几十万开发者在看的算法讲解
想成体系刷透这类套路?去图解算法专题