返回

揭秘 14. 最长公共前缀:巧用字符串特性,轻松找出前缀之王

前端

对于程序员来说,字符串操作是不可或缺的能力。而找出字符串数组中的最长公共前缀,则是其中一个颇具挑战性的课题。本文将带领大家深入浅出地探究 LeetCode 上的第 14 题:最长公共前缀,并揭秘解决这一难题的巧妙方法。

理解题目要点

题目要求我们编写一个函数,找出给定字符串数组中所有字符串的最长公共前缀。最长公共前缀指的是这些字符串中所有字符相同的最长连续子串。如果不存在公共前缀,则函数返回空字符串 ""。

举个例子,对于字符串数组 ["flower", "flow", "flight"], 最长公共前缀是 "fl",因为这是这三个字符串都拥有的最长相同前缀。

巧用字符串特性

解决此题的关键在于巧用字符串的特性。我们可以使用一个循环依次比较字符串数组中的每一个字符,直到找到第一个不相同的字符为止。从该字符开始,字符串数组中所有字符串就没有公共前缀了。

例如,对于 ["flower", "flow", "flight"],我们可以逐个比较字符:

第一个字符:'f',所有字符串相同
第二个字符:'l',所有字符串相同
第三字符:'o',"flower""flow" 相同,但 "flight" 不同

因此,最长公共前缀是 "fl"。

实现代码

基于上述思路,我们可以实现以下 Python 代码:

def longest_common_prefix(strs):
    """
    :type strs: List[str]
    :rtype: str
    """
    if not strs:
        return ""

    shortest_str = min(strs, key=len)

    for i, char in enumerate(shortest_str):
        for other_str in strs:
            if other_str[i] != char:
                return shortest_str[:i]

    return shortest_str

此代码首先判断给定字符串数组是否为空,如果是,则返回空字符串。接下来,它找到数组中长度最短的字符串,因为最长公共前缀不可能长于最短字符串。

然后,代码使用一个循环逐个比较最短字符串中的每个字符。如果任何其他字符串中的对应字符不同,则返回最短字符串中从开头到该字符之前的部分作为最长公共前缀。如果循环完成,则意味着所有字符串都具有相同的公共前缀,因此返回最短字符串。

结语

通过巧用字符串的特性,我们可以有效地解决 LeetCode 上的第 14 题:最长公共前缀。无论是初学者还是经验丰富的程序员,掌握这种字符串操作技巧都至关重要。本文提供的清晰解释和示例代码,将帮助你轻松应对类似的编程难题,提升你的字符串操作能力。