📜  这至少两个字符串的前缀字符串最长的字符串(1)

📅  最后修改于: 2023-12-03 14:57:56.818000             🧑  作者: Mango

最长公共前缀

在编程中,我们经常需要比较两个字符串的相似度,而最长公共前缀是一个非常重要的概念。最长公共前缀指的是至少两个字符串的前缀字符串最长的字符串。

问题描述

给定一个字符串数组,编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,则返回空字符串 ""。

输入: ["flower","flow","flight"]

输出: "fl"

输入: ["dog","racecar","car"]

输出: ""

解法思路

本问题的解法思路比较简单,可以通过前缀匹配来实现。具体步骤如下:

  1. 首先将字符串数组按照长度排序,取最短字符串的长度。
  2. 遍历最短字符串的前缀,将其与其它字符串的相应位置比较。
  3. 如果有不匹配的字符,则直接返回前缀字符串。
  4. 如果全部匹配,则返回最短字符串。
代码实现
def longestCommonPrefix(strs) -> 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
复杂度分析

时间复杂度:$O(nm)$,其中 n 是字符串数组中的字符串数量,m 是最短字符串的长度。最坏情况下,我们需要遍历所有字符串一次,比较每个字符串的前缀,共需要 $n*(m-1)$ 次比较。

空间复杂度:$O(1)$,只需要常数空间来保存最长公共前缀。