最大公共子串问题的Python解法

来源:互联网 发布:mysql数据库教学视频 编辑:程序博客网 时间:2024/05/02 04:59

求两个字符串的最大公共子字符串问题是个经典的问题了,下面给出Python的解法。


def find_lcsubstr(s1, s2):    m = [[0 for i in range(len(s2) + 1)] for j in range(len(s1) + 1)]    #print("m",m)# 生成0矩阵,为方便后续计算,比字符串长度多了一列    mmax = 0  # 最长匹配的长度    p = 0  # 最长匹配对应在s1中的最后一位    for i in range(len(s1)):        for j in range(len(s2)):            if s1[i] == s2[j]:                m[i + 1][j + 1] = m[i][j] + 1                if m[i + 1][j + 1] > mmax:                    mmax = m[i + 1][j + 1]                    p = i + 1    return s1[p - mmax:p], mmax  # 返回最长子串及其长度print(find_lcsubstr('abcdfg', 'abdfg'))

输出结果:

('dfg', 3)
原创粉丝点击