最近在看轨迹相似度的计算,看到了一些算法,就简单的记录下:
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
网友评论