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))
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值