美文网首页
寻找字符串数组的最长公共子串

寻找字符串数组的最长公共子串

作者: 阿狸不歌 | 来源:发表于2019-04-27 23:06 被阅读0次

所谓最长公共子串问题是寻找两个或多个已知字符串最长的子串。例如字符串 “ABCD”与“ABCDE”、“FABCDE”的最长公共子串是“ABCD”……

值得注意的是,有些人把最长公共子序列、最长公共前缀与最长公共子串搞混淆了,请特别注意⚠️。

高效算法

《高效算法:竞赛、应试与提高必修128例》中介绍了最长公共子串的算法,不过只是找两个字符串之间的最长公共子串,并没有给出任意个数(此处当然指的是3个或以上)字符串的最长公共子串的求法。

现在用Python试写如下:

def 最长子串(字符串数组):
    子串 = ''
    if len(字符串数组) > 1 and len(字符串数组[0]) > 0:
        for i in range(len(字符串数组[0])):
            for j in range(len(字符串数组[0])-i+1):
                if j > len(子串) and 是否为子串(字符串数组[0][i:i+j], 字符串数组):
                    子串 = 字符串数组[0][i:i+j]
    return 子串

def 是否为子串(鉴定目标, 字符串数组):
    if len(字符串数组) < 1 and len(鉴定目标) < 1:
        return False
    for i in range(len(字符串数组)):
        if 鉴定目标 not in 字符串数组[i]:
            return False
    return True

if __name__ == '__main__':
    测试字符串数组 = ["ABCD", "ABCDE", "FABCDE"]        
    print(最长子串(测试字符串数组))
    # ABCD

最长子串还可以用lamada写法,看起来更加简洁

def lamada最长子串(字符串数组):
    子串 = ''
    if len(字符串数组) > 1 and len(字符串数组[0]) > 0:
        for i in range(len(字符串数组[0])):
            for j in range(len(字符串数组[0])-i+1):
                if j > len(子串) and all(字符串数组[0][i:i+j] in 元素 for 元素 in 字符串数组):
                    子串 = 字符串数组[0][i:i+j]
    return 子串

if __name__ == '__main__':
    测试字符串数组 = ["ABCD", "ABCDE", "FABCDE", "1ABCDF"]
    print(lamada最长子串(测试字符串数组))
    # ABCD

这个方法的复杂度是 O(n1 x n1 x (n1 + ... + nK)) , 如果字符串不复杂,还是可以一用的😄。

相关文章

  • 算法---寻找字符串数组的最长公共子串

    寻找一个字符串数组中的最长公共子串

  • 寻找字符串数组的最长公共子串

    所谓最长公共子串问题是寻找两个或多个已知字符串最长的子串。例如字符串 “ABCD”与“ABCDE”、“FABCDE...

  • 练习题:最长公共前缀

    求字符串数组内字符串的最长公共前缀

  • 字符串算法

    最长公共前缀 最长回文串 最长回文子序列 最长公共子串 反转单词顺序列 反转字符串 字符串转数字 IP-int互转

  • Day3

    Longest Common Prefix寻找字符串数组的最长公共前缀** 思路:拿出第一个字符串,后面的字符串如...

  • 最长公共子串

    问题: 找出最长、连续的子字符串 思路: 遍历X、Y的所有子字符串,找出最长公共后缀,则最长公共后缀的长度就是最长...

  • 【python】求两个字符串的公共字串?

    题目:找出两个字符串的最长公共字串,例如字符串“abccade”与字符串“dgcadde”的最长公共子串为“cad...

  • 5,最长公共前缀/数组与字符串

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

  • Swift 最长公共前缀 - LeetCode

    题目: 最长公共前缀 描述: 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""...

  • leetcode探索之旅(14)

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

网友评论

      本文标题:寻找字符串数组的最长公共子串

      本文链接:https://www.haomeiwen.com/subject/wwolnqtx.html