力扣-14. 最长公共前缀(Longest Common Prefix)

力扣-14. 最长公共前缀(Longest Common Prefix)
solovedeng最后编辑于2025-06-19
14. 最长公共前缀(Longest Common Prefix)
Easy
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,则返回空字符串 ""。
示例 1:
输入: strs = ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: strs = ["dog","racecar","car"]
输出: ""
约束:
1 <= strs.length <= 2000 <= strs[i].length <= 200strs[i]由小写英文字母组成
思路与常见解法
此题没有复杂的数据结构,常见解法包括:
纵向扫描(逐列比较):以第一个字符串为基准,逐列比较其它字符串对应位置的字符,遇到不匹配或某个字符串到达末尾即停止,时间复杂度 O(S)(S 为所有字符总数)。
横向扫描(逐个字符串缩减前缀):将当前公共前缀与下一个字符串比较并逐步缩减,直到与所有字符串匹配。
排序法:对字符串数组按字典序排序,最长公共前缀必出现在排序后首尾两个字符串之间,比较首尾的公共前缀即可,时间复杂度 O(n log n + L)(L 为比较长度)。
分治法:将数组分成两半,分别求各自最长公共前缀,再合并,类似归并思想,复杂度 O(S)。
下面给出几种实现。
方法一:纵向扫描(逐列比较)
1 | class Solution { |
- 时间复杂度: O(S)
- 空间复杂度: O(1)
方法二:简洁的纵向扫描(遇到不匹配直接返回 substr)
1 | class Solution { |
方法三:排序法(比较首尾字符串)
1 | class Solution { |
- 说明: 排序法巧妙地把问题简化为比较两端字符串,适合于需要处理大量相似字符串的场景。
作者想说的话:
最长公共前缀问题通常用纵向扫描或排序法即可解决:纵向扫描直观且高效(按需停止),排序法在某些场景代码更简洁。
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果


