首页 > 编程语言 > 详细

python实现查找最长公共子序列

时间:2019-07-15 21:42:10      阅读:223      评论:0      收藏:0      [点我收藏+]

话不多说直接上代码

#!/usr/bin/python
# -*- coding: UTF-8 -*-

worlds = [fosh,fort,vista,fish,hish,hello,ohddad,abofaboca321ADFlloaha5shcdf]
user_input = frt

def    find_longest_substring(world_a,world_b):
    """
    查找最长公共子序列函数

    实现公式伪代码
    if word_a[i] == word_b[j]:
        matrix[i][j] = matrix[i-1][j-1] + 1
    else:
        matrix[i][j] = max(matrix[i-1][j],matrix[i][j-1])
    """
    # 生成矩阵
    matrix = [[0 for i in range(len(world_a))]  for j in range(len(world_b))]

    for i in range(len(world_b)):
        for j in range(len(world_a)):
            if world_b[i] == world_a[j]:
                if j != 0:
                    matrix[i][j] = matrix[i-1][j-1] + 1
                else:
                    matrix[i][j] = matrix[i][j] + 1
            else:
                matrix[i][j] = max(matrix[i-1][j],matrix[i][j-1])

    return matrix[-1][-1]

longest_substring = 0
best_match = {}

for world_a in worlds:
    number = find_longest_substring(world_a,user_input)
    if number >= longest_substring:
        if number == longest_substring:
            best_match[world_a] = number
        else:
            best_match = {}
            best_match[world_a] = number

        longest_substring = number

for key in best_match:
    print "%s与%s,相似度:%.2f%%" % (user_input,key,best_match[key] / float(len(key))*100)
    # find_longest_substring(user_input,world_a)

 

python实现查找最长公共子序列

原文:https://www.cnblogs.com/tanghaiyong/p/11191624.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!