02806: 公共子序列
dp, http://cs101.openjudge.cn/practice/02806
我们称序列
现在给出两个序列X和Y,你的任务是找到X和Y的最大公共子序列,也就是说要找到一个最长的序列Z,使得Z既是X的子序列也是Y的子序列。
输入
输入包括多组测试数据。每组数据包括一行,给出两个长度不超过200的字符串,表示两个序列。两个字符串之间由若干个空格隔开。
输出
对每组输入数据,输出一行,给出两个序列的最大公共子序列的长度。
样例输入
abcfbc abfcab
programming contest
abcd mnp样例输出
4
2
0来源: 翻译自Southeastern Europe 2003的试题
python
while True:
try:
a, b = input().split()
except EOFError:
break
alen = len(a)
blen = len(b)
dp = [[0]*(blen+1) for i in range(alen+1)]
for i in range(1, alen+1):
for j in range(1, blen+1):
if a[i-1]==b[j-1]:
dp[i][j] = dp[i-1][j-1] + 1
else:
dp[i][j] = max(dp[i-1][j], dp[i][j-1])
print(dp[alen][blen])