题目描述
思路解析动画文字版
记住这条:逐列比较所有字符串的同一位,全相同就延长,一旦某个不同或某串到头,前缀就到这停。
上面一排是第一个单词 "interpreter" 的每一位字符(下标固定)。我们以它为基准,从第 0 列开始,逐列去和其它单词的同一位比。公共前缀一开始是空的。
比较第 0 列:基准单词这一位是 'i'。右边列出每个单词在第 0 列的字符——逐个看它们是不是都等于 'i'。
第 0 列所有单词都是 'i',全相同!把 'i' 并入公共前缀,前缀变成 "i",这一列变绿,继续看下一列。
比较第 1 列:基准单词这一位是 'n'。右边列出每个单词在第 1 列的字符——逐个看它们是不是都等于 'n'。
第 1 列所有单词都是 'n',全相同!把 'n' 并入公共前缀,前缀变成 "in",这一列变绿,继续看下一列。
比较第 2 列:基准单词这一位是 't'。右边列出每个单词在第 2 列的字符——逐个看它们是不是都等于 't'。
第 2 列所有单词都是 't',全相同!把 't' 并入公共前缀,前缀变成 "int",这一列变绿,继续看下一列。
比较第 3 列:基准单词这一位是 'e'。右边列出每个单词在第 3 列的字符——逐个看它们是不是都等于 'e'。
第 3 列所有单词都是 'e',全相同!把 'e' 并入公共前缀,前缀变成 "inte",这一列变绿,继续看下一列。
比较第 4 列:基准单词这一位是 'r'。右边列出每个单词在第 4 列的字符——逐个看它们是不是都等于 'r'。
第 4 列所有单词都是 'r',全相同!把 'r' 并入公共前缀,前缀变成 "inter",这一列变绿,继续看下一列。
比较第 5 列:基准单词这一位是 'p'。右边列出每个单词在第 5 列的字符——逐个看它们是不是都等于 'p'。
第 5 列所有单词都是 'p',全相同!把 'p' 并入公共前缀,前缀变成 "interp",这一列变绿,继续看下一列。
比较第 6 列:基准单词这一位是 'r'。右边列出每个单词在第 6 列的字符——逐个看它们是不是都等于 'r'。
第 6 列所有单词都是 'r',全相同!把 'r' 并入公共前缀,前缀变成 "interpr",这一列变绿,继续看下一列。
比较第 7 列:基准单词这一位是 'e'。右边列出每个单词在第 7 列的字符——逐个看它们是不是都等于 'e'。
第 7 列所有单词都是 'e',全相同!把 'e' 并入公共前缀,前缀变成 "interpre",这一列变绿,继续看下一列。
比较第 8 列:基准单词这一位是 't'。右边列出每个单词在第 8 列的字符——逐个看它们是不是都等于 't'。
第 8 列所有单词都是 't',全相同!把 't' 并入公共前缀,前缀变成 "interpret",这一列变绿,继续看下一列。
比较第 9 列:基准单词这一位是 'e'。右边列出每个单词在第 9 列的字符——逐个看它们是不是都等于 'e'。
第 9 列出现不一致:单词 "interpreting" 这一位是 'i',不等于基准的 'e'。只要有一个单词不同或到头,公共前缀就到此为止——停!最终公共前缀就是 "interpret"。
扫描结束:前 9 列(绿色)是所有单词都一致的部分,它们拼起来 "interpret" 就是最长公共前缀。后面的列因为出现了不一致,不再属于公共前缀。
边界先想清:早停、无公共前缀、单个单词。
两个高频追问:其它解法 + 为什么基准选第一个。
参考代码
def longestCommonPrefix(strs): if not strs: return "" base = strs[0] # 以第一个单词为基准 for col in range(len(base)): # 逐列 ch = base[col] for w in strs: # 比较所有单词的同一位 if col >= len(w) or w[col] != ch: return base[:col] # 不同/到头 → 前缀到此为止 return base # 基准串本身就是公共前缀复杂度
- 时间:O(n·m),n 个单词,最坏每列都比一遍,m 为公共前缀长度
- 空间:O(1),只用常数个变量,不额外开数组
易错点
面试追问把动画讲成自己的话
追问除了纵向扫描,还有别的思路吗?
追问为什么可以只以第一个单词为基准?
这道题到这就讲完了。动画和文字是同一套思路——别光看,关掉页面自己默写一遍。然后顺着主线继续:
移除元素
LeetCode 27 · 简单 · 沿着 数组 & 哈希 继续往下推进
把这道题真正学会,再走
图解算法年卡 ¥99 /年
- ✓本题每步动画的吴师兄语音讲解(全站陆续覆盖)
- ✓小欧带 8 步通关训练——追问到不看答案也能写对、能 30 秒讲给面试官听
- ✓学习报告,记录每道题的掌握程度
76k+ GitHub Star · 吴师兄开源图解算法,几十万开发者在看的算法讲解
想成体系刷透这类套路?去图解算法专题