返回
解题之道,解密LeetCode【最长公共前缀】的奥秘
前端
2023-09-16 14:47:45
LeetCode 14. 最长公共前缀
LeetCode上的「最长公共前缀」是一道经典的算法题,旨在寻找给定字符串数组中的最长公共前缀,即所有字符串中最先出现的共同部分。
题目解析
- 问题陈述:
给定一个字符串数组strs
,返回所有字符串的最长公共前缀。如果不存在公共前缀,则返回空字符串""
。 - 示例:
示例 1:
输入:strs = ["flower", "flow", "flight"]
输出:"fl"
示例 2:
输入:strs = ["dog", "racecar", "car"]
输出:""
- 考察要点:
- 字符串比较
- 循环和遍历
- 最小公共长度识别
- 前缀匹配
- 边界条件处理
解决方案
-
核心思想:
- 找出字符串数组中长度最小的字符串,记为最小长度
minLen
。 - 遍历最小长度的字符串的每个字符,从第一个字符开始,逐个比较每个字符串的相同位置字符是否相同。
- 如果所有字符串的字符都相同,则将当前字符添加到公共前缀中,否则终止循环。
- 重复步骤 2 和步骤 3,直到找到公共前缀或到达最小长度的字符串末尾。
- 找出字符串数组中长度最小的字符串,记为最小长度
-
具体步骤:
- 找出字符串数组中最短的字符串的长度
minLen
。 - 初始化公共前缀
commonPrefix
为空字符串。 - 循环遍历
minLen
个字符:
- 获取当前字符
c
。 - 比较
strs
中所有字符串的当前位置字符是否都等于c
:- 如果所有字符串的字符都等于
c
,则将c
添加到commonPrefix
中。 - 否则,终止循环。
- 如果所有字符串的字符都等于
- 返回
commonPrefix
。
- 找出字符串数组中最短的字符串的长度
-
代码实现(Python):
def longestCommonPrefix(strs):
if not strs:
return ""
minLen = min(len(s) for s in strs)
commonPrefix = ""
for i in range(minLen):
c = strs[0][i]
if all(s[i] == c for s in strs):
commonPrefix += c
else:
break
return commonPrefix
示例验证
- 示例 1:
strs = ["flower", "flow", "flight"]
result = longestCommonPrefix(strs)
print(result) # 输出:"fl"
- 示例 2:
strs = ["dog", "racecar", "car"]
result = longestCommonPrefix(strs)
print(result) # 输出:""
总结
「最长公共前缀」是一道考察字符串比较、循环和遍历、边界条件处理等基础算法技能的题目。通过对这道题的深入理解和练习,可以帮助程序员巩固基本算法知识,为解决更复杂的算法问题奠定基础。