百練OJ:2678:基因檢測

kangyucheng發表於2018-01-20

題目連結:

描述 用一個字串表示一段基因,例如:“CTATGGGTTT”。兩段基因的相似度定義為它們所包含的最大公共子串的長度。例如:“CCTTGG”和“TGGGC”的最大公共子串為“TGG”,它的長度為3,則我們稱“CCTTGG”和“TGGGC”的相似度為3。現給定兩段基因,要求計算它們的相似度。 輸入 輸入第一行包含一個正整數N(0<N<100),表示測試資料的數目;接下來N行,每行包含兩個字串(每個字串長度小於等於20),用一個空格隔開,分別表示給定的兩段基因。 輸出 對於每組測試資料輸出一行,該行包含一個整數,表示給定基因段的相似度。 樣例輸入
2
CCCCC TTTTTGGGGGCC
ACTGGG DDD
樣例輸出
2
0
解題程式碼:
def getMax(str1,str2,minlen):
    t = 0
    a = minlen
    while a > -1:
        for i in range(minlen-a):
            substr2 = str2[i:i+a+1]
            # print(substr2)
            if substr2 in str1:
                t = a+1
                break
        if t > 0:
            break
        a -= 1
    return t

n = int(input())
for i in range(n):
    x = input()
    str1 = x.split()[0]
    str2 = x.split()[1]
    if len(str1) > len(str2):
        r = getMax(str1, str2, len(str2))
    else:
        r = getMax(str2, str1, len(str1))
    print(r)



相關文章