📅  最后修改于: 2023-12-03 15:06:56.569000             🧑  作者: Mango
在字符串数组中查找最长公共前缀是一种经典的问题,常常出现在算法面试中。本文将介绍使用排序算法查找最长公共前缀的Python程序。
给定一个字符串数组,找到所有字符串的最长公共前缀。
例如,对于字符串数组 ['flower', 'flow', 'flight']
,这个问题的答案是 'fl'
。
提示: 所有输入只包含小写字母字符集。如果不存在公共前缀,返回一个空字符串 ""。
最长公共前缀的简单解法是逐位检查所有字符,但这种方法的时间复杂度是 O(n^2),其中 n 是字符串数组中字符串的平均长度。我们可以通过使用排序来加快最长公共前缀的查找,具体步骤如下:
这种方法只需 O(n*logn) 的时间复杂度,比简单解法更快。
def longest_common_prefix(strs):
if not strs:
return ""
strs.sort()
prefix = ""
for i in range(len(strs[0])):
if all(s[i] == strs[0][i] for s in strs):
prefix += strs[0][i]
else:
break
return prefix
首先,检查给定字符串数组是否为空,如果为空则直接返回空字符串。
然后,我们使用 Python 的 sort() 方法对字符串数组进行排序。这将使所有字符串的首字母排在一起。
接着,我们用一个空字符串 prefix 来存储最长公共前缀。我们对排好序的数组的第一个字符串进行逐字符检查,直到发现不同字符或到达任一字符串的末尾为止。如果所有字符串都包含该字符,则将其添加到 prefix 中。否则,跳出循环并返回 prefix。
下面是一些测试样例:
assert longest_common_prefix(['flower', 'flow', 'flight']) == 'fl'
assert longest_common_prefix(['dog', 'racecar', 'car']) == ''
assert longest_common_prefix(['', 'c', 'c']) == ''
本文介绍了如何使用排序算法查找字符串数组的最长公共前缀。这种方法的时间复杂度是 O(n*logn),比逐位检查所有字符更快,而且代码很简洁易懂。