20650: 最长的公共子序列的长度
http://cs101.openjudge.cn/practice/20650/
我们称一个字符的数组S为一个序列。对于另外一个字符数组Z,如果满足以下条件,则称Z是S的一个子序列:(1)Z中的每个元素都是S中的元素(2)Z中元素的顺序与在S中的顺序一致。例如:当S = (E,R,C,D,F,A,K)时,(E,C,F)和(E,R)等等都是它的子序列。而(R,E)则不是。
现在我们给定两个序列,求它们最长的公共子序列的长度。
输入
一共两行,分别输入两个序列。
输出
一行,输出最长公共子序列的长度。
样例输入
ABCBDAB
BDCABA样例输出
4python
def longest_common_subsequence(s1, s2):
dp = [[0 for _ in range(len(s2)+1)] for _ in range(len(s1)+1)]
for i in range(len(s1)):
for j in range(len(s2)):
if s1[i] == s2[j]:
dp[i+1][j+1] = dp[i][j] + 1
else:
dp[i+1][j+1] = max(dp[i+1][j], dp[i][j+1])
return dp[len(s1)][len(s2)]
s1 = input()
s2 = input()
print(longest_common_subsequence(s1, s2))