簡體   English   中英

最長公共子序列的基本實現哪里出錯了

[英]Where am I going wrong in the basic implementation of Longest Common Subsequence

我嘗試使用以下代碼在 python 中實現 LCS,我哪里出錯了?

def lcs(s1,s2):
    if len(s1) == 0 or len(s2) == 0:
        return ""
    
    n = len(s1) - 1
    m = len(s2) - 1
        
    if s1[n] == s2[m]:
        return lcs(s1[:n], s2[:m]) + s1[n]
    else:
        return lcs(s1[:n], s2), lcs(s1, s2[:m])

s1 = "abcbac"
s2 = "babacc"
res = lcs(s1, s2)
print(res)

我得到無法將元組與字符串連接錯誤。 我試圖通過將 s1[n] 轉換為元組來解決它,但沒有用,我還嘗試使用全局變量和 append s1[n]。

如何更改上述代碼以實現 LCS?

在 else 情況下你返回一個元組

def lcs(s1,s2):
    if not s1 or not s2:
        return ''
        
    n = len(s1) - 1
    m = len(s2) - 1
        
    if s1[n] == s2[m]:
        return lcs(s1[:n], s2[:m]) + s1[n]
    else:
        return max(lcs(s1[:n], s2), lcs(s1, s2[:m]), key=lambda x: len(x))

正確的做法是從兩個遞歸中返回最長的公共子序列。 我還注意到這種基於遞歸的方法有點慢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM