字串篇(python)—兩個字串的最長公共子序列

程式猿小劉LeooO發表於2020-12-06

字串篇(python)—兩個字串的最長公共子序列

給定兩個字串A,B,長度分別為m,n。要求求出他們的最長公共子序列,返回其長度,例如
A = “hello word”
B = “loop”
最長公共子序列為“loo” 長度為3
思路
動態規劃的子問題res[i][j]為截止到字串A的第i個字元和截止到字串B的第j個字元的最長公共子序列。由此可以得出遞推公式
當i=0 or j=0 res[i][j] = 0
當A[i] == B[j]時 res[i][j] = res[i-1][j-1]+1
當A[i]!=B[j]時 res[i][j] = max(res[i-1][j],res[i][j+1])

def getLongestComSeq(str1,str2):
	len1 = len(str1)
	len2 = len(str2)
	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 str2[i - 1] == str1[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]
print(getLongestComSeq("helloworld", "loop"))			 

在這裡插入圖片描述
在這裡插入圖片描述

相關文章