Python编码---2个字符串寻找最长子字符串

1、问题描述

String:字符串是由数字、字母、下划线等组成的一串字符。字符串的有关操作,各个大厂笔试、面试高频问题,如输入2个字符串,求2个字符串的最长公共字符串。

本文用Python语言实现2个字符串S1、S2中寻找最长公共字符串(长度相等,都打印)。

2、源代码

#判断s2是否s1的子字串
def judgy_substring(s1,s2):
    slen1= len(s1)
    slen2 = len(s2)
    if slen2 > slen1:
        s1, s2 = s2, s1
        slen1, slen2 = slen2, slen1
    for i in range(slen1):
        if slen2+i > slen1:
            return False
        if s1[i] == s2[0] and s1[i:slen2+i] == s2:
            return True
    else:
        return False

#从两个字符串s1,s2寻找最长公共字符串
def search_common_substring(s1,s2):
    slen1= len(s1)
    slen2 = len(s2)
    substring = [[]]  #考虑相同字符串情况,赋值成[[]]
    if slen2 > slen1:
        s1,s2 = s2,s1
        slen1,slen2 = slen2,slen1

    for i in range(slen2):
        tmp=[].copy()
        if slen2==1 and s2 in list(s1):  #考虑特殊情况
            return s2
        s2 = list(s2)
        for j in range(slen2,i,-1):
            sub_s2 = ''.join(s2[i:j].copy())     #s2[i:j] 是必须是list不支持字符串
            if judgy_substring(s1,sub_s2):
                tmp = list(sub_s2)
                break
        else:
            continue
        if len(tmp) > len(substring[0]):
            substring = [[]]
            substring.append(tmp.copy())         #这里用list浅拷贝,独立记录每轮遍历结果
            substring.remove([])
        elif len(tmp) == len(substring[0]):
            substring.append(tmp.copy())
    if not substring:
        print("not find common substring!!!")
        return ''
    return substring

3、运行结果

输出字符串S1:12345098547=133
输出字符串S2:123451985471133
最大子字符串结果:
12345  98547 

4、编码感想

       从两个字符串S1,S2如何动态寻找最长子字串,而字符串长度和位置都是不可知。这种情况遍历最长字符串S1,记录从S1每个字符位置开始,再去遍历字符串S2,起止位置是S2每个字符位置,因为要求是最长子字串,终止位置是从S2最后一个位置开始寻找,一旦找到, 跳出内层循环。进入外层循环下一个字符,重复。如果发现外层下一个循环的最大公共字符串更大,取最大;如果相同,同时记录下来。最后返回。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值