Python の初心者として、2 つの文字列を比較し、両方の文字列が共有する最長の部分文字列を検索する作業関数を作成しました。たとえば、関数が「goggle」と「google」を比較すると、「go」と「gle」が 2 つの共通部分文字列 (1 文字を除く) として識別されますが、「gle」が最も長いため、「gle」のみが返されます。
コードが長くて複雑であると見なされる可能性があるため、コードのどこかを改善/再作成できるかどうかを知りたいです。また、解決策への他のアプローチを見てとてもうれしく思います。前もって感謝します!
def longsub(string1, string2):
sublist = []
i=j=a=b=count=length=0
while i < len(string1):
while j < len(string2):
if string1[i:a+1] == string2[j:b+1] and (a+1) <= len(string1) and (b+1) <= len(string2):
a+=1
b+=1
count+=1
else:
if count > 0:
sublist.append(string1[i:a])
count = 0
j+=1
b=j
a=i
j=b=0
i+=1
a=i
while len(sublist) > 1:
for each in sublist:
if len(each) >= length:
length = len(each)
else:
sublist.remove(each)
return sublist[0]
編集: 「ゴーグル」と「グーグル」の比較は、同じ位置にある最長の共通セグメントと同じ長さであるため、悪い例である可能性があります。実際の入力は、「xabcdkejp」と「zkdieaboabcd」に近いものになります。正しい出力は「abcd」です。