使用一个L(i,j),这里代表的是S1字符串的前m位中的前i个字符和S2字符串的前n位的前j个字符的最长公共子序列的长度,对于该问题的状态转移方程分为3种情况,分别是,当m和n都是0的时候,则有L(m,n)=0,第二种情况是当m和n都大于0的时候,并且对应的S1的m位字符和S2的n位字符相同时,L(m,n)=L(m-1,...
forjinrange(1,len2+1): ifs1[i-1]==s2[j-1]:#若当前两字母对比相等,在长度都减一的串比较结果上加1(当前位置左上的位置结果+1) dparray[i][j]=dparray[i-1][j-1]+1 else:#若当前两字母对比不相等,取各减小一个长度的比较最小值(取当前位置的左位置和当前位置的上位置中的最大值) #参考:...
1.1. 最长公共子序列(Longest-Common-Subsequences,LCS) 最长公共子序列(Longest-Common-Subsequences,LCS)是一个在一个序列集合中(通常为两个序列)用来查找所有序列中最长子序列的问题。这与查找最长公共子串的问题不同的地方是:子序列不需要在原序列中占用连续的位置。 最长公共子序列问题是一个经典的计算机科学问题...
defzuichanggonggongzixulie(s1,s2):"""计算s1与s2的最长公共子序列"""len1=len(s1)len2=len(s2)dparray=[[0for_inrange(len1+1)]for_inrange(len2+1)]#构建基础上加1,首行首列都为0,某一个字符串为空print("dp初始二维数组为:")foriindparray:print(i)foriinrange(1,len1+1):#设len1为行...