返回
LeetCode 300 题之 (14) 最长公共前缀:从零开始的算法入门指南
前端
2023-09-17 00:25:45
导读:
LeetCode 作为全球著名的算法练习平台,为广大程序员提供了丰富的题目库和完善的学习体系。在这篇博文中,我们将深入浅出地讲解 LeetCode 300 题之 (14) 最长公共前缀,带领你从零开始入门算法世界。通过思维导图、全部解法和示例代码,我们旨在让你全面掌握这道题目的精髓,为你的算法之旅奠定坚实的基础。
一、题目
给定一个字符串数组 strs,找到其中所有字符串的 最长公共前缀。
注意:如果不存在公共前缀,返回空字符串 ""。
例如:
输入:strs = ["flower", "flow", "flight"]
输出:"fl"
输入:strs = ["dog", "racecar", "car"]
输出:""
解释:不存在公共前缀。
二、解法总览(思维导图):
[图片:思维导图]
三、全部解法:
1 方案 1:水平扫描
def longestCommonPrefix(strs):
"""
:type strs: List[str]
:rtype: str
"""
if not strs:
return ""
# 找出最短的字符串
min_length = min(len(s) for s in strs)
# 逐个字符比较,直到遇到不匹配的字符
prefix = ""
for i in range(min_length):
char = strs[0][i]
for j in range(1, len(strs)):
if strs[j][i] != char:
return prefix
prefix += char
return prefix
2 方案 2:二分查找
def longestCommonPrefix(strs):
"""
:type strs: List[str]
:rtype: str
"""
if not strs:
return ""
# 找出最短的字符串
min_length = min(len(s) for s in strs)
# 二分查找公共前缀的长度
low, high = 0, min_length - 1
while low <= high:
mid = (low + high) // 2
prefix = strs[0][:mid + 1]
if all(strs[i][:mid + 1] == prefix for i in range(1, len(strs))):
low = mid + 1
else:
high = mid - 1
# 返回找到的公共前缀
return strs[0][:low]
总结:
通过对 LeetCode 300 题之 (14) 最长公共前缀的深入剖析,我们掌握了两种高效的解法:水平扫描和二分查找。这些算法不仅适用于这道具体题目,更体现了算法设计中常用的技术。通过不断地练习和总结,你一定能够在算法的道路上披荆斩棘,成就斐然!