字符串篇(python)—两个字符串的最长公共子序列

字符串篇(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"))			 

在这里插入图片描述
在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值