返回

解题之道,解密LeetCode【最长公共前缀】的奥秘

前端

LeetCode 14. 最长公共前缀
LeetCode上的「最长公共前缀」是一道经典的算法题,旨在寻找给定字符串数组中的最长公共前缀,即所有字符串中最先出现的共同部分。

题目解析

  • 问题陈述:
    给定一个字符串数组 strs,返回所有字符串的最长公共前缀。如果不存在公共前缀,则返回空字符串 ""
  • 示例:
    示例 1:
输入:strs = ["flower", "flow", "flight"]
输出:"fl"

示例 2:

输入:strs = ["dog", "racecar", "car"]
输出:""
  • 考察要点:
    • 字符串比较
    • 循环和遍历
    • 最小公共长度识别
    • 前缀匹配
    • 边界条件处理

解决方案

  • 核心思想:

    1. 找出字符串数组中长度最小的字符串,记为最小长度 minLen
    2. 遍历最小长度的字符串的每个字符,从第一个字符开始,逐个比较每个字符串的相同位置字符是否相同。
    3. 如果所有字符串的字符都相同,则将当前字符添加到公共前缀中,否则终止循环。
    4. 重复步骤 2 和步骤 3,直到找到公共前缀或到达最小长度的字符串末尾。
  • 具体步骤:

    1. 找出字符串数组中最短的字符串的长度 minLen
    2. 初始化公共前缀 commonPrefix 为空字符串。
    3. 循环遍历 minLen 个字符:
    • 获取当前字符 c
    • 比较 strs 中所有字符串的当前位置字符是否都等于 c
      • 如果所有字符串的字符都等于 c,则将 c 添加到 commonPrefix 中。
      • 否则,终止循环。
    1. 返回 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)  # 输出:""

总结

「最长公共前缀」是一道考察字符串比较、循环和遍历、边界条件处理等基础算法技能的题目。通过对这道题的深入理解和练习,可以帮助程序员巩固基本算法知识,为解决更复杂的算法问题奠定基础。