2016-08-17 4 views
0

LCS( 'human'、 'chimp')を実行すると、 "hm"の代わりに "h"が表示されます。 LCS( 'gattaca'、 'tacgaacta')を実行すると、 "gaaca"の代わりに "g"が表示されます。 私はLCS( 'うわ'、 'うわ')を実行すると、正しい "ww"を得ています。 私はLCS( ''、 'whew')を実行すると、正しいものが得られます。 LCS( 'abcdefgh'、 'efghabcd')を実行すると、 "abcd"の代わりに "a"が表示されます。 私は間違って何をしていますか?あなたはLCSを書き込まない方法であること最長共通部分シーケンスPython 2関数

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 
+1

ループを2番目のwhileループの最後にリセットする –

+0

なぜこれが機能すると思われましたか? – user2357112

+1

@ RahulMadhavan:いいえ、まだ完全に間違っています。このコードは実際には救済可能ではありません。固定されたバージョンは基本的に完全な書き換えになります。 – user2357112

答えて

0

ラボの私の隣の人に感謝します!また、スタックオーバーフロー時にはいつも忍者に遭遇しない方がいいでしょう。

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 
0

は、ここに私のコードです。これは、最初の文字列の最初の文字と等しい2番目の文字列の文字数を計算する非常に奇妙な関数を書く方法です。

あなたが書こうとしていたものは間違っていると思うので、それは問題ではありませんが、あなたが書こうとしていることを正しく推測すれば、ループの外側の0にjを代入するのを忘れてしまいました。

関連する問題