[英]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.