Skip to main content
 首页 » 编程设计

Python:比较两个字符串并返回它们共有的最长段

2025年05月04日26zengkefu

作为 Python 的新手,我编写了一个工作函数,它将比较两个字符串并搜索两个字符串共享的最长子字符串。例如,当函数比较“goggle”和“google”时,它会将“go”和“gle”识别为两个公共(public)子字符串(不包括单个字母),但只会返回“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] 

编辑:比较“goggle”和“google”可能是一个不好的例子,因为它们的长度相等,最长的公共(public)段位于相同的位置。实际输入将更接近于此:“xabcdkejp”和“zkdieaboabcd”。正确的输出应该是“abcd”。

请您参考如下方法:

在标准库中实际上恰好有一个函数:difflib.SequencMatcher.find_longest_match