PTA演習-python 7-10共通部分文字列検索

最長共通部分文字列検索。部分文字列とは、元の文字列内の連続する文字のセグメントを指します。

入力形式:

2 つの文字列を 1 行ずつ入力し、両方の文字列に共通する最長の部分文字列を見つけます。

出力フォーマット:

共通部分文字列を出力します。

入力サンプル:

ここに一連の入力が与えられます。例えば:

Hefei Normal University
Anhui Hefei

出力例:

対応する出力をここに示します。例えば:

Hefei

アイデア分析

1. 短い文字列を選択し、短い文字列を使用して長い文字列と一致させます

2.長い文字列を短い文字列の最初から1つずつ一致させ(ダブルサイクル)、最初の同じ文字列を保存し、位置を記憶し、2つの次の文字列が同じかどうかを一致させるためにリサイクルします(前提条件:両方を判断します)。最後の位置の文字列でもありません。そうでない場合は壊れます)、同じ場合は保存され、そうでない場合は壊れてから壊れます

3. 毎回取得した共通部分文字列の長さを前回と比較し、長ければ置換する

コード


str1=input()
str2=input()
# 选出短的那条,用短的去匹配长的
str_short,str_long= (list(str2),list(str1)) if len(str1)>len(str2) else (list(str1),list(str2))

s1 = ''
for i in range(len(str_short)):
    for k in range(len(str_long)):
        s2 =''  # 每次匹配都要清空s2
        y = k   # 记住此时k的值,以便后面找到相同串时,顺序匹配下一个串是否相同
        if str_short[i] == str_long[k]: #找到第一个相同的串,先记住
            s2 = s2 + str_short[i]
            for x in range(i,len(str_short)): #再找下一个是否相同
                if x!= len(str_short)-1 and y!= len(str_long)-1: # 先判断都不是最后一个位置的串
                    if str_short[x+1]==str_long[y+1]: # 相同则存起来
                        s2 = s2 + str_short[x+1]
                        y = y + 1  # 继续匹配下一个
                    else : # 否则就是不同,跳出
                        break
                else:
                    break
            if len(s2)>len(s1): # 如果后面得到的共同子串比前面的长,则替换
                s1 = s2
print(s1)

結果を提出する

 

おすすめ

転載: blog.csdn.net/weixin_58707437/article/details/128083061