📌  相关文章
📜  给定数组中具有最大长度的最长公共前缀的字符串对(1)

📅  最后修改于: 2023-12-03 15:11:40.265000             🧑  作者: Mango

给定数组中具有最大长度的最长公共前缀的字符串对

给定一个字符串数组,需要找到具有最长公共前缀的字符串对,即找到数组中两个字符串的最长公共前缀,且这两个字符串的长度之和最大。

思路

对数组进行排序,按照字符串长度从小到大排序,然后依次比较相邻两个字符串的前缀,取最长公共前缀即可。因为字符串长度越小,它们的最长公共前缀长度也越小,所以只需要比较相邻两个字符串即可。

代码实现
def longest_common_prefix(arr):
    arr = sorted(arr, key=len)  # 按字符串长度从小到大排序
    n = len(arr)
    res = ''
    for i in range(n-1):
        s1, s2 = arr[i], arr[i+1]
        p = ''
        for j in range(min(len(s1), len(s2))):
            if s1[j] == s2[j]:
                p += s1[j]
            else:
                break
        if len(p) > len(res):
            res = p
    return res
测试样例
arr = ['abcdefg', 'abcd', 'abc', 'ab']
assert longest_common_prefix(arr) == 'ab'

arr = ['abcd', 'ab', 'ab', 'a']
assert longest_common_prefix(arr) == 'a'

arr = ['abcdefg', 'efg', 'fg', 'g']
assert longest_common_prefix(arr) == 'g'
时间复杂度

排序的时间复杂度为 $O(n\log n)$,比较公共前缀的时间复杂度为 $O(n^2)$,因此总的时间复杂度为 $O(n^2)$。