最长公共子串

查找两个字符串a,b中的最长公共子串

https://www.nowcoder.com/practice/181a1a71c7574266ad07f9739f791506

s1=input()
s2=input()

''' # 先识别字符串长短,再求公共子串,找最长字串
# 报红:运行超时
for s in (s1,s2):
    if len(s)==max(len(s1),len(s2)):
        long=s
        #print(long)
    elif len(s)==min(len(s1),len(s2)):
        short=s
        #print(short)
# 识别公共子串可以简化,截取s1子串,若在s2中,则是公共子串,不用遍历s1、s2所有子串
short_l=[]
for i in range(len(short)):
    for j in range(i+1,len(short)+1):
        short_l.append(short[i:j])
#print(short_l)

long_l=[]
for i in range(len(long)):
    for j in range(i+1,len(long)+1):
        long_l.append(long[i:j])
#print(long_l)

common_l={}
for i in short_l:
    for j in long_l:
        if i==j:
            common_l[i]=len(i)
#print(common_l)
'''
#设定s1为较短字符串,若不是,交换
if len(s1)>len(s2):
    s1,s2=s2,s1
#截取s1子串,若在s2中,则是公共子串
#将公共子串存在common中,若有更长的公共子串,更新common,最终结果即为最长的一个
common=''
for i in range(len(s1)):
    for j in range(i+1,len(s1)+1):
        if s1[i:j] in s2 and j-i>len(common):
            common=s1[i:j]
print(common)
#若有多个,输出在s1、s2较短串中最先出现的那个。


全部评论

相关推荐

小红书 后端开发 总包n+8w+期权
点赞 评论 收藏
分享
点赞 评论 收藏
分享
无敌虾孝子:喜欢爸爸还是喜欢妈妈
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务