我们有两个字符串m和n,如果它们的子串a和b内容相同,则称a和b是m和n的公共子序列。子串中的字符不一定在原字符串中连续。
例如字符串“abcfbc”和“abfcab”,其中“abc”同时出现在两个字符串中,因此“abc”是它们的公共子序列。此外,“ab”、“af”等都是它们的字串。
现在给你两个任意字符串(不包含空格),请帮忙计算它们的最长公共子序列的长度。
输入包含多组数据。
每组数据包含两个字符串m和n,它们仅包含字母,并且长度不超过1024。
对应每组输入,输出最长公共子序列的长度。
abcfbc abfcab programming contest abcd mnp
4 2 0
try:
while True:
string1,string2 = input().split()
result = [[0 for i in range(len(string2)+1)] for j in range(len(string1)+1)]
#result[i][j]保存string1前i个子串和string2前j个子串的公共子序列
for i in range(1,len(string1)+1):
for j in range(1,len(string2)+1):
result[i][j] = max(result[i-1][j],result[i][j-1])
if string1[i-1]==string2[j-1]:
result[i][j] = result[i-1][j-1]+1 #等于子串都减一的公共子序列长度加一
print(result[-1][-1])
except Exception:
pass
#在编译器上可以成功运行,在牛客上总是提示运行超时,不知道怎么办了
while True:
try:
A, B = map(str, raw_input('').split())
n = len(A)
m = len(B)
matrix = [0] * m * n
for i in range(n):
if A[i] == B[0]:
for j in range(i, n):
matrix[j] = 1
for i in range(m):
if B[i] == A[0]:
for j in range(i, m):
matrix[j * n] = 1
for i in range(1, m):
for j in range(1, n):
if B[i] == A[j]:
matrix[i * n + j] = max(matrix[(i - 1) * n + j - 1] + 1, matrix[(i - 1) * n + j], matrix[i * n + j - 1])
else:
matrix[i * n + j] = max(matrix[(i - 1) * n + j], matrix[i * n + j - 1])
print matrix[m * n - 1]
except:
break
# -*- encoding:utf -*- import sys def solution(s1,s2,j,i,res,l1,l2): if j==l1 or i==l2: return res else: if s2[i] in s1[j:]: n1=solution(s1,s2,j,i+1,res,l1,l2) while j < l1: if s1[j]==s2[i]:break else:j+=1 n2=solution(s1,s2,j,i+1,res+1,l1,l2) return max(n1,n2) else: return solution(s1, s2, j, i+1, res,l1,l2) if __name__ == "__main__": s1, s2 = map(str, raw_input().split()) l1 = len(s1) l2 = len(s2) s3="" for i in xrange(l2): if s2[i] in s1:s3+=s2[i] #print s3 s2=s3 l2 = len(s2) n=solution(s1,s2,0,0,0,l1,l2) print n为什么在自己的电脑上测试用例可以通过,但是提交给系统却提示返回值为空?