最长公共子序列(LCS)【Python】

求最长公共子序列问题
s1:AB34C s2:A1BC2 结果为:ABC

def dfs(s1,s2):
    l1 = len(s1)
    l2 = len(s2)
    ans = []  #存放最优解  
    for i in range(l1): #遍历l1
        li = []
        for j in range(l2):#遍历l2
            if s1[i] == s2[j]:  #寻找两个相同的元素。
                li.append(s1[i]) 
                li.extend(dfs(s1[i+1:],s2[j+1:]))  #递归的求解剩余元素。
                break
        if len(li)>len(ans): #如果新解比原有最优解长,则替换。
            ans = li
    return ans

if __name__ == '__main__':
    s1 = 'abcwedsqqw'
    s2 = 'bdwdwqweqqw'
    print(dfs(s1,s2))#['b', 'w', 'e', 'q', 'q', 'w']

你可能感兴趣的:(最长公共子序列(LCS)【Python】)