美文网首页
求任意两字符串的最长公共子串长度,并找出所有最长公共子串

求任意两字符串的最长公共子串长度,并找出所有最长公共子串

作者: mosband | 来源:发表于2020-01-02 09:48 被阅读0次

    一、代码

    def lcstring(string1, string2):
        len1 = len(string1)
        len2 = len(string2)
        # dp[i][j]表示string1和string2中,以string1[i]/string2[j]结尾的最长公共子串长度
        # 当i,j皆大于0时,若string1[i - 1] 与 string2[j - 1] 相等
        # 则 dp[i][j] = dp[i - 1][j - 1] + 1
        # 否则 dp[i][j] = 0
        dp = [[0 for j in range(len2 + 1)] for i in range(len1 + 1)]
        # 用于保存当前阶段最长公共子串的长度
        max_len = 0
        # 用于保存长度为当前阶段max_len的所有公共子串
        lcstring_set = None
        for i in range(1, len1 + 1):
            for j in range(1, len2 + 1):
                if string1[i - 1] == string2[j - 1]:
                    dp[i][j] = dp[i - 1][j - 1] + 1
                    if dp[i][j] > max_len:
                        max_len = dp[i][j]
                        lcstring_set = set()
                        lcstring_set.add(string1[i - max_len:i])
                    elif dp[i][j] == max_len:
                        lcstring_set.add(string1[i - max_len:i])
                else:
                    dp[i][j] = 0
    
        return max_len, lcstring_set
    
    
    max_len, lcstring_set = lcstring('habcdelloworldertyasdfd', 'loopabcdddqasdfdertyzsdfsv')
    print(max_len)
    print(lcstring_set)
    
    

    2、运行结果

    5
    {'asdfd', 'derty'}

    相关文章

      网友评论

          本文标题:求任意两字符串的最长公共子串长度,并找出所有最长公共子串

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