返回

LeetCode 第 14 题:最长公共前缀,算法技巧入门学习

后端

LeetCode 入门小讲堂,最长公共前缀大揭秘

大家好,我是你们的算法学习陪跑员。今天,我们继续打卡算法题,学习 LeetCode 第 14 题最长公共前缀。这道题目是一道简单题,非常适合算法初学者入门学习。

题目

给定一个字符串数组,找到它们的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""。

示例 1:

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

示例 2:

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

示例 3:

输入:strs = ["a"]
输出:"a"

解题思路

这道题目的解题思路很简单,我们可以使用两个指针来遍历字符串数组中的每个字符串。第一个指针指向最长公共前缀的起始位置,第二个指针指向最长公共前缀的结束位置。

我们从第一个字符串开始,使用第一个指针遍历字符串中的每个字符。如果当前字符与第二个指针指向的字符相同,则将第二个指针向后移动一位。如果当前字符与第二个指针指向的字符不同,则停止遍历,并记录下最长公共前缀的长度。

然后,我们使用同样的方法,从第二个字符串开始,遍历字符串中的每个字符。如果当前字符与第一个指针指向的字符相同,则将第一个指针向后移动一位。如果当前字符与第一个指针指向的字符不同,则停止遍历,并记录下最长公共前缀的长度。

最后,我们将记录下来的最长公共前缀的长度与字符串数组中的所有字符串的长度进行比较,取最小的长度作为最长公共前缀的长度。

代码实现

def longestCommonPrefix(strs):
    if not strs:
        return ""

    # 找到最短的字符串
    min_len = min(len(s) for s in strs)

    # 比较每个字符
    for i in range(min_len):
        char = strs[0][i]
        if all(s[i] == char for s in strs):
            continue
        else:
            return strs[0][:i]

    return strs[0][:min_len]


# 测试用例
strs1 = ["flower", "flow", "flight"]
print(longestCommonPrefix(strs1))  # "fl"

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

strs3 = ["a"]
print(longestCommonPrefix(strs3))  # "a"

结语

LeetCode 第 14 题最长公共前缀是一道非常经典的算法入门题。这道题目的解题思路很简单,但需要我们对字符串的处理和遍历有深入的理解。

如果你想学习算法,我建议你从这道题开始。这道题目的难度不大,但它可以帮助你掌握一些重要的算法技巧。这些技巧在解决其他算法题时也会非常有用。

希望今天的分享对大家有所帮助。我们明天见!