#! /usr/bin/env python3 # -*- coding: utf-8 -*- # 对于最长公共子串问题,答案为网格中最大的数字——它可能并不位于最后的单元格中 def findlongestsubstring(source, dest): # 输入值(内循环), 要比较的目标(外循环) inLen = len(source) outLen = len(dest) cell = [ [0 for j in range(inLen+1)] for i in range(outLen+1)] for i in range(1, outLen+1): for j in range(1, inLen+1): cell[i][j] = 0 if dest[i-1] == source[j-1]: # 字母相同 cell[i][j] = cell[i-1][j-1] + 1 for i in range(1, outLen+1): print(cell[i][1:]) longest = -1 flag = -1 for i in range(1, outLen+1): for j in range(1, inLen+1): if longest < cell[i][j]: longest = cell[i][j] flag = j #print("max = %d, end = %d" % (longest, flag)) print("The Longest sub string of \"%s\" and \"%s\" is \"%s\"" % (source, dest, dest[flag-longest:flag])) return cell if __name__ == "__main__": #findlongestsubstring("hisha", "fish") #print() findlongestsubstring("hish", "vista") #print() findlongestsubstring("hish", "hash")
核心思想:
if word_a[i] == word_b[j]: ←---------两个字母相同
cell[i][j] = cell[i-1][j-1] + 1
else: ←------------------------------两个字母不同
cell[i][j] = 0
python -- 最长公共子串
最新推荐文章于 2024-05-06 23:42:46 发布