Python 中最长公共前缀(LCP)问题的解决方法

2023-04-17 00:00:00 前缀 解决方法 最长

最长公共前缀(LCP)问题是指:给定一组字符串,找出它们之间的最长公共前缀。例如,对于字符串集合["pidancode.com", "pidan", "pida"],它们的最长公共前缀为"pida"。

解决这个问题的方法比较简单,可以依次遍历每个字符串的每个字符,判断它们是否相同。如果有一个字符串到达了末尾,或者当前字符不相同,就说明最长公共前缀已经结束,返回当前已经匹配到的前缀即可。

下面是 Python 代码演示:

def longestCommonPrefix(strs):
    if not strs:
        return ""
    prefix = strs[0]  # 从第一个字符串开始遍历
    for s in strs[1:]:
        i = 0
        while i < len(prefix) and i < len(s) and prefix[i] == s[i]:
            i += 1
        prefix = prefix[:i]  # 取出前缀部分
        if not prefix:
            return ""  # 如果前缀为空,直接返回
    return prefix

# 测试
assert longestCommonPrefix(["pidancode.com", "pidan", "pida"]) == "pida"
assert longestCommonPrefix(["pidancode.com", "pidan", "pia"]) == "pi"
assert longestCommonPrefix([]) == ""

在上面的代码中,我们首先判断字符串集合是否为空。如果是空集合,直接返回空字符串。否则,我们以第一个字符串作为初始匹配前缀,遍历其他字符串,依次找到它们的最长公共前缀。如果某个字符串的前缀为空,直接返回空字符串。最后返回当前已经匹配到的前缀即可。

代码的时间复杂度为O(NM),其中N是字符串集合的长度,M是字符串中最长的字符串长度。

相关文章