返回

用螺丝刀轻松解决最长公共前缀难题

闲谈

邂逅最长公共前缀
最长公共前缀(Longest Common Prefix)在字符串处理中扮演着至关重要的角色。它指的是一组字符串中所有字符串都共享的连续字符序列,且该序列在字符串组中是最长的。例如,在字符串组“flower”、“flow”、“flight”中,最长公共前缀为“fl”。

理解最长公共前缀的内涵

最长公共前缀的本质是找出字符串集合中所有字符串都有的共同字符串。为了深入理解这一概念,让我们举几个例子。

  • 示例1:输入:strs = ["flower","flow","flight"]
    输出:"fl"
    字符串“flower”、“flow”、“flight”的最长公共前缀是“fl”。

  • 示例2:输入:strs = ["dog","racecar","car"]
    输出:""
    字符串“dog”、“racecar”、“car”没有公共前缀,因此输出为空字符串。

  • 示例3:输入:strs = ["apple","apply","approve"]
    输出:"app"
    字符串“apple”、“apply”、“approve”的最长公共前缀是“app”。

螺旋式解题之旅

  1. 明确目标: 我们的目标是找到输入字符串集合中所有字符串的最长公共前缀。
  2. 纵观全局: 我们从全体入手,观察字符串集合中所有字符串的第一个字符,如果它们相同,那么这个字符一定是公共前缀的一部分。若有不同,则不存在公共前缀,任务结束。
  3. 逐层深入: 确认第一个字符为公共前缀后,我们继续比较字符串集合中所有字符串的第二个字符,并不断重复这一过程,直到找到公共前缀为止,或直到发现没有公共前缀为止。
  4. 抽丝剥茧: 我们不断比较字符串集合中所有字符串的每个字符,逐层深入,层层剥茧,直到找到公共前缀。
  5. 收获成果: 当我们到达字符串的最末尾时,所获得的字符串即为字符串集合中最长公共前缀。

代码实现的妙笔生辉

def longest_common_prefix(strs):
  """
  寻找最长公共前缀。

  参数:
    strs: 字符串列表。

  返回值:
    最长公共前缀。
  """

  # 特殊情况处理:空字符串列表或空字符串。
  if not strs or "" in strs:
    return ""

  # 找到最短字符串的长度。
  min_length = min(len(s) for s in strs)

  # 从第一个字符开始比较字符串。
  for i in range(min_length):
    # 获取第一个字符串的第i个字符。
    char = strs[0][i]

    # 比较其他字符串的第i个字符是否与第一个字符串相同。
    for s in strs[1:]:
      if s[i] != char:
        # 如果有不同,返回最长公共前缀。
        return strs[0][:i]

  # 所有字符串的公共前缀为最短字符串的长度。
  return strs[0][:min_length]

结束语

最长公共前缀问题是一个经典的Leetcode简单题。通过本篇文章,我们详细地介绍了该题的含义、知识背景、解答步骤以及代码实现,希望能够帮助您轻松理解和解决该问题。