返回

一叶障目不见泰山——《每日一道算法题005 最长公共前缀》破解思路

Android

前言

算法题是程序员的必修课,也是面试官考察候选人编程能力的重要手段。每日一道算法题系列文章旨在帮助读者提高算法题解题能力。

题目

给定一个字符串数组,找到所有字符串中最长的公共前缀。如果不存在公共前缀,则返回空字符串 ""。

示例 1:

输入:strs = ["flower", "flow", "flight"]
输出:"fl"

示例 2:

输入:strs = ["dog", "racecar", "car"]
输出:""

示例 3:

输入:strs = ["flower", "flower", "flower", "flower"]
输出:"flower"

我的解题思路

这道题可以有多种解法,我使用的是比较暴力的破解方法,直接进行双循环对比,然后拼接返回结果。

  1. 首先,我将字符串数组中的所有字符串都转成小写,这样可以避免大小写不同的情况。
  2. 然后,我从第一个字符串开始,逐个字符地与其他字符串进行比较。
  3. 如果遇到不匹配的字符,则我将前缀字符串截取到不匹配字符的前一个字符,并返回。
  4. 如果所有字符串都比较完了,都没有遇到不匹配的字符,则我将前缀字符串返回。

代码实现

def longestCommonPrefix(strs):
  # 将所有字符串转成小写
  strs = [s.lower() for s in strs]

  # 初始化前缀字符串
  prefix = ""

  # 逐个字符地比较字符串
  for i in range(len(strs[0])):
    char = strs[0][i]
    # 如果遇到不匹配的字符,则截取前缀字符串并返回
    if any(s[i] != char for s in strs):
      return prefix
    # 否则,将字符添加到前缀字符串中
    else:
      prefix += char

  # 如果所有字符串都比较完了,都没有遇到不匹配的字符,则返回前缀字符串
  return prefix


# 测试代码
strs = ["flower", "flow", "flight"]
print(longestCommonPrefix(strs))  # "fl"

strs = ["dog", "racecar", "car"]
print(longestCommonPrefix(strs))  # ""

strs = ["flower", "flower", "flower", "flower"]
print(longestCommonPrefix(strs))  # "flower"

结语

以上就是我解决《每日一道算法题005 最长公共前缀》的思路和方法。希望对大家有所帮助。