使用排序查找最长公共前缀的Python程序
问题陈述:给定一组字符串,找到最长的公共前缀。
例子:
Input: {"geeksforgeeks", "geeks", "geek", "geezer"}
Output: "gee"
Input: {"apple", "ape", "april"}
Output: "ap"
字符串数组的最长公共前缀是两个最不相似的字符串之间的公共前缀。例如,在给定的数组 {“apple”, “ape”, “zebra”} 中,没有公共前缀,因为数组“ape”和“zebra”的两个最不相似的字符串不共享任何起始字符。
我们在下面的帖子中讨论了五种不同的方法。
- 逐字匹配
- 字符字符
- 分而治之
- 二进制搜索。
- 使用特里)
在这篇文章中,我们讨论了一种基于排序的新方法。这个想法是对字符串数组进行排序,并找到排序数组的第一个和最后一个字符串的公共前缀。
Python 3
# Python 3 program to find longest
# common prefix of given array of words.
def longestCommonPrefix( a):
size = len(a)
# if size is 0, return empty string
if (size == 0):
return ""
if (size == 1):
return a[0]
# sort the array of strings
a.sort()
# find the minimum length from
# first and last string
end = min(len(a[0]), len(a[size - 1]))
# find the common prefix between
# the first and last string
i = 0
while (i < end and
a[0][i] == a[size - 1][i]):
i += 1
pre = a[0][0: i]
return pre
# Driver Code
if __name__ == "__main__":
input = ["geeksforgeeks", "geeks",
"geek", "geezer"]
print("The longest Common Prefix is :" ,
longestCommonPrefix(input))
# This code is contributed by ita_c
输出:
The longest common prefix is : gee
时间复杂度: O(MAX * n * log n) 其中 n 是数组中的字符串数,MAX 是任何字符串中的最大字符数。请注意,两个字符串的比较最多需要 O(MAX) 时间,对于 n 个字符串的排序,我们需要 O(MAX * n * log n) 时间。
有关更多详细信息,请参阅有关使用排序的最长公共前缀的完整文章!