最长的Common Subsequence Python 2函数

时间:2016-08-17 20:03:16

标签: python python-2.7 lcs

当我运行LCS('人类','黑猩猩')时,我得到了" h"而不是" hm"。 当我运行LCS(' gattaca',' tacgaacta')时,我得到了" g"而不是" gaaca"。 当我运行LCS('哇',' whew')时,我得到了" ww"哪个是对的。 当我运行LCS('',' whew')时,我得到了""哪个是对的。 当我运行LCS(' abcdefgh',' efghabcd')时,我得到了" a"而不是" abcd"。 我做错了什么?

这是我的代码:

def LCS(S, T):
  array = ''
  i = 0
  j = 0
  while i < len(S):
    while j < len(T):
      if S[i] == T[j]:
        array += S[i]
      j += 1
    i += 1
  return array

2 个答案:

答案 0 :(得分:0)

这不是你写LCS的方式。这就是你编写非常奇怪的函数的方法,它计算第二个字符串中等于第一个字符串第一个字母的字母数。

我相信你写的意思是错的,所以这没关系,但是如果我正确地猜到了你的写作意图,你就忘了在外部while循环中将0分配给j。

答案 1 :(得分:0)

感谢实验室旁边的人们!不要偶尔在Stack Overflow上遇到傲慢的人。

def LCS(S, T):
  # If either string is empty, stop
  if len(S) == 0 or len(T) == 0:
    return ""

  # First property
  if S[-1] == T[-1]:
    return LCS(S[:-1], T[:-1]) + S[-1]

  # Second proprerty
  # Last of S not needed:
  result1 = LCS(S[:-1], T)
  # Last of T not needed
  result2 = LCS(S, T[:-1])
  if len(result1) > len(result2):
    return result1
  else:
    return result2