【机试题(实现语言:python3)】查找两个字符串中的最长公共子串

题目描述
查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。
注:子串的定义:将一个字符串删去前缀和后缀(也可以不删)形成的字符串。请和“子序列”的概念分开!

本题含有多组输入数据!
输入描述:

输入两个字符串

输出描述:

返回重复出现的字符

示例1
输入

abcdefghijklmnop
abcsafjklmnopqrstuvw

输出

jklmnop

代码实现:

import re
def func():
    while True:
        try:
            str_min = input()
            str_max = input()
            if len(str_min)>len(str_max):
                str_max,str_min = str_min,str_max
            len1 = len(str_min)
            same_value = ''
            length = 1
            for i in range(len1-length+1):
                for j in range(len1-length+1):
                    str_value = str_min[j:j+length]
                    #print("str_value:",str_value)
                    if str_value in str_max:
                        if len(str_value) > len(same_value):
                            same_value = str_value
                length = length+1
            print(same_value)
        except Exception as e:
            #print(e)
            break
if __name__ =='__main__':
    func()

实现2:

import re
def func():
    while True:
        try:
            str1=input()
            str2=input()
            n = 0
            s = ''
            if len(str1)>len(str2):
                str1,str2 = str2, str1
            for i in range(len(str1)+1):
                if str1[i-n:i] in str2:
                    s = str1[i-n:i]
                    #print(s)
                    n +=1
            print(s)
        except:
            break
if __name__ =='__main__':
    func()
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值