最长公共子串(自编)

#编程题1,输入2个字符串,输入2行,找出两个字符串最长的公共子串
如:aocdfe,pmcdfa,则输出cdf

输入:aocdfe

          pmcdfa

输出:cdf

strs=[]#放2个输入的字符串
for i in range(0,2):
    t=input()
    strs.append(t)
strs#把2个字符放入这个列表里
strs1=strs[0]#字符串1
strs2=strs[1]#字符串2
len1=len(strs1)#字符串1的长度
len2=len(strs2)#字符串2的长度
lenmin=min(len1,len2)#公共子串肯定小于最短的那个字符串

str1list=[]#针对输入的字符串1,放所有1-lenmin的字符,1位的,2位的,lenmin位的
str2list=[]#针对输入的字符串2
for i in  range(0,len1):#从开始的位置
    for j in range(1,lenmin):#取数的数量,
        t=strs1[i:][0:j]#从第0位取后面的数,并取j位  #
        str1list.append(t)

for i in  range(0,len2):
    for j in range(1,lenmin):
        t=strs2[i:][0:j]#从第0位取后面的数,并取j位  #
        str2list.append(t)

tong=[]#放所有  的  公共子串
for i in str1list:#
    for j in str2list:
        if i==j:
            if i not in tong:
                 tong.append(i)
len_list=[]#公共子串的长度
for i in tong:
    len_list.append(len(i))
maxlen=max(len_list)#取最长的公共子串
for i in tong:#遍历到最长的公共子串
    if len(i)==maxlen:
        print(i)
        print("公共子串最长的长度",maxlen,"此公共子串是:",i)


print("字符串1拆分",str1list)
print("字符串2拆分",str2list)
print("公共子串",tong)
print("公共子串各元素长度",len_list)
aocdfe
pmcdfa
cdf
公共子串最长的长度 3 此公共子串是: cdf
字符串1拆分 ['a', 'ao', 'aoc', 'aocd', 'aocdf', 'o', 'oc', 'ocd', 'ocdf', 'ocdfe', 'c', 'cd', 'cdf', 'cdfe', 'cdfe', 'd', 'df', 'dfe', 'dfe', 'dfe', 'f', 'fe', 'fe', 'fe', 'fe', 'e', 'e', 'e', 'e', 'e']
字符串2拆分 ['p', 'pm', 'pmc', 'pmcd', 'pmcdf', 'm', 'mc', 'mcd', 'mcdf', 'mcdfa', 'c', 'cd', 'cdf', 'cdfa', 'cdfa', 'd', 'df', 'dfa', 'dfa', 'dfa', 'f', 'fa', 'fa', 'fa', 'fa', 'a', 'a', 'a', 'a', 'a']
公共子串 ['a', 'c', 'cd', 'cdf', 'd', 'df', 'f']
公共子串各元素长度 [1, 1, 2, 3, 1, 2, 1]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值