2012-09-24 44 views
-3

我很接近完成我的程序,但我有一個小問題。在I/O是假設是這樣的:LCS Python關閉

I: fanlc2("human", "chimpanzee") 
O: [4, 'h#man', '#h#m#an###'] 

,但礦,執行以下操作:

I: fanlc2("human", "chimpanzee") 
O: [4, '#', '#h#'] 

是否有人可以修改我的代碼,所以我得到正確的答案。我無法弄清楚。感謝:

def fanlc2(S1, S2): 
    if S1 == '' or S2 == '': 
     return [0, S1, S2] 
    if S1[0] == S2[0]: 
     temp = fanlc2(S1[1:], S2[1:]) 
     return [temp[0]+1, S1[0]+temp[1], S2[0]+temp[2]] 
    t1 = fanlc2(S1[1:], S2) 
    t2 = fanlc2(S1, S2[1:]) 
    if t1[0] > t2[0] or t1[0] == t2[0]: 
     return [t1[0], '#'+t1[1], t2[1]] 
    return [t2[0], t1[1], '#'+t2[1]] 

這裏有更多的I/O是該方案應該返回:

fanlc2( 「X」, 「Y」)

[0, '#', '#' ]

fanlc2( 「垃圾郵件」, 「」)

[0, '####', '']

fanlc2( 「溫泉」, 「M」)

[0, 「###」, 「#」]

fanlc2( 「貓」, 「汽車」)

[2「,CA#, 「CA#」]

fanlc2( 「貓」, 「LCA」)

[2 「CA#」, 「#ca」]

fanlc2( 「人」, 「黑猩猩」)

[4,' h#man','#h#m#an ###']

+3

請解釋你正在做什麼,以及你認爲你的代碼應該經歷的步驟。目前我們有一個'猜測算法'的遊戲,然後我們會找出錯誤的地方。 –

+0

您需要先將其降至最低級別; 'fanlc2('n','an')'已經不會產生你所期望的,我想。 –

+0

代碼應取2個字符串並返回一個列表: [字符串,字符串1,字符串2的LCS],但是當它返回字符串1和字符串2時,它應該有'#'不一樣 – user1681664

回答

1

您可以使用set功能:

  • 查找S1獨特的字母與set(S1)
  • 查找S2獨特的字母與set(S2)
  • common=set(S1)&set(S2)
  • 建設t1查找常用字母通過檢查S1的每個字母是否在common並返回th Ë如果字母或True如果#False
  • 構建t2以同樣的方式
  • 你已經知道有多少字母共同你有。

當然,如果賦值是使用遞歸,那麼就忘了所有這些。