#编程题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]