美文网首页
两个字符串公共子串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