作为 Python 的新手,我编写了一个工作函数,它将比较两个字符串并搜索两个字符串共享的最长子字符串。例如,当函数比较“goggle”和“google”时,它会将“go”和“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”。