2014-09-19 38 views
2

我按照video中的说明实现了最长的公共子序列问题。它只是执行第一组代码并生成一个空列表。这个实现有什么问题?最长的公共子序列实现-python

def lcs_recursive(xlist,ylist): 
    if not xlist or ylist: 
     return [] 
    x,xs,y,ys, = xlist[0],xlist[1:],ylist[0],ylist[1:] 
    if x == y: 
     return [x] + lcs_recursive(xs,ys) 
    else: 
     return max(lcs_recursive(xlist,ys),lcs_recursive(xs,ylist),key=len) 



s1 = 'abc' 
s2 = 'aeb' 

print lcs_recursive(s1,s2) 
+0

为什么不能在这里张贴之前使用谷歌的http://rosettacode.org/wiki/Longest_common_subsequence#Recursion_7 – Abhi 2014-09-19 09:34:23

回答

3

if not xlist or ylist:将评估为if (not xlist) or (ylist),因此,如果你的东西Truthy(如非空列表),以ylist它将始终评估为真传。你可能想:

if not xlist or not ylist: 
    return [] 

另外,您可以使用:

if not all([xlist, ylist]): 
    return [] 
+0

Oh..I没没有注意到它。谢谢。 – 2014-09-19 09:31:58