2012-09-24 43 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以同样的方式
  • 你已经知道有多少字母共同你有。

当然,如果赋值是使用递归,那么就忘了所有这些。