美文网首页
两个字符串公共子串LCS, LCSS

两个字符串公共子串LCS, LCSS

作者: 丙吉 | 来源:发表于2021-10-20 15:35 被阅读0次

最近在看轨迹相似度的计算,看到了一些算法,就简单的记录下:

LCS: 两个字符串中公共子序列的长度;
LCSS:两个字符串的公共子串的长度。
具体差异可见计算结果,算法在网上找相关资料查看,代码给简单的记录下。

def LCS(string1,string2):
    """
    @note              : 求两个字符串的公共子序列
    @parameter string1 : 字符串1
    @parameter string2 : 字符串2
    @return            : 返回两个字符串中公共的子序列长度
    """
    len1 = len(string1)
    len2 = len(string2)
    res = [[0 for i in range(len1+1)] for j in range(len2+1)]
    for i in range(1,len2+1):
        for j in range(1,len1+1):
            if string2[i-1] == string1[j-1]:
                res[i][j] = res[i-1][j-1]+1
            else:
                res[i][j] = max(res[i-1][j],res[i][j-1])
    return res[-1][-1]


def LCstring(string1,string2):
    """
    @note              : 求两个字符串的公共子串
    @parameter string1 : 字符串1
    @parameter string2 : 字符串2
    @return            : 返回两个字符串中公共的子串长度
    """
    len1 = len(string1)
    len2 = len(string2)
    res = [[0 for i in range(len1+1)] for j in range(len2+1)]
    result = 0
    for i in range(1,len2+1):
        for j in range(1,len1+1):
            if string2[i-1] == string1[j-1]:
                res[i][j] = res[i-1][j-1]+1
                result = max(result,res[i][j])  
    return result

结果如下:

print(LCS("helloworld","loop"))
print(LCstring("helloworld","loop"))
3
2

相关文章

网友评论

      本文标题:两个字符串公共子串LCS, LCSS

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