Python —— 查询两个字符串的最长公共子串

查询两个字符串的最长公共子串

 
 
 
 
 
 
 
 

查询两个字符串的最长公共子串

思路:
1、通过字符串1从全长开始判断是否存在于字符串2中,如果不存在则迭代至只有1位字符
2、通过列表来保存结果,以免出现有多个同长的最长子串情况
3、选择长度短的字符串作为操作字符串,以提升效率

def getLongestSameStr(str1, str2):
    # 判断两个字符串长短,取短的那个进行操作
    if len(str1) > len(str2):
        str1, str2 = str2, str1

    # 用列表来接收最终的结果,以免出现同时有多个相同长度子串被漏查的情况
    resList = []

    # 从str1全长开始进行检测,逐渐检测到只有1位
    for i in range(len(str1), 0, -1):
        # 全长情况下不对切片进行遍历
        if i == len(str1):
            if str1 in str2:
                resList.append(str1)
        # 非全长情况下,对str1进行切片由0到当前检测长度,迭代到str1的最后
        else:
            j = 0
            while i < len(str1):
                testStr = str1[j:i]
                if testStr in str2:
                    resList.append(testStr)
                i += 1
                j += 1
        # 判断当前长度下,是否存在子串
        if len(resList) > 0:
            return resList
    return resList


str1 = 'abcedefg'
str2 = 'defabcd'
print(getLongestSameStr(str1, str2))
posted @ 2022-06-05 20:49  阿伦alun  阅读(1214)  评论(0编辑  收藏  举报