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

2021-10-20  本文已影响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
上一篇 下一篇

猜你喜欢

热点阅读