0

これは宿題の質問で、私はかなり困惑しました。私は何度もこのコードを書き込もうとしましたが、まだ何もしていません。問題は、2 本の DNA 鎖の間で最も長い共通部分配列を見つけ、その配列を印刷することです。ここにいる誰かが私を助けて、何をすべきか教えてもらえますか? ウィンドウを設定し、find 関数を使用して文字列が等しい場所を確認し、max 関数を設定して最長のもののみを表示しました。

def main():

s1 = input("Enter first strand: ")
s2 = input("Enter second strand: ")
window = 0
if len(s1) < len(s2):
    window = len(s1)
elif len(s1) > len(s2):
    window = len(s2)
else:
    window = len(s1)
for i in range(window, 1, -1):
    for j in range(0, i, 1):
     if s1.find(s1[i:i + window]) == s2.find(s2[i:i + window]):
        max = a[0][0]
        for i in range(len(a)):
            for j in range(len(a[i]):
                if (a[i][j] > max):
                    max = a[i][j]
                    print ("Common Subsequence: ", max)
     else:
        print ("No Common Sequence Found")

main()
4

1 に答える 1

0

等しい長さのストランドが与えられたと仮定します (これは宿題なので、ストランドの長さが等しくない場合は微調整させていただきます)。

from itertools import zip_longest, chain
def longestCommonSubstring(p1, p2):

    answer = [[0.0 for _ in range(len(p2)+1)] for _ in range(len(p1)+1)]

    for r, row in enumerate(answer[1:], 1):
        for c, _ in enumerate(row[1:], 1):
            if p1[r-1] == p2[c-1]:
                answer[r][c] = answer[r-1][c-1]+1
            else:
                answer[r][c] = 0.0

    return max(chain.from_iterable(matrix))/max(len(p1), len(p2))

お役に立てれば

編集:実装find

def myFind(string, substring):
    for i in range(len(string) - len(substring)):
        if string[i] == substring[0]:
            if string[i:i+len(substring)] == substring:
                print substring, "found in", string, "at position", i

文字列比較を使用したくない場合:

def myFind(string, substring):
    for i in range(len(string) - len(substring)):
        if string[i] == substring[0]:
            found = True
            for j in range(len(substring)):
                if string[i+j] != substring[j]:
                    found = False
            if found:
                print substring, "found in", string, "at position", i
于 2013-07-30T02:49:01.800 に答える