最长公共子串查找。子串指原字符串中的一段连续的字符。
输入格式:
分行输入两个字符串,求两个字符串共有的最长子串。
输出格式:
输出公共子串。
输入样例:
在这里给出一组输入。例如:
Hefei Normal University
Anhui Hefei
输出样例:
在这里给出相应的输出。例如:
Hefei
思路分析
1、选出短的字串,用短的去匹配长的
2、从短串第一个开始逐一匹配长串(双重循环),遇到第一个相同串则存下来,记住位置,再循环匹配两者的下一个串是否相同(前提:判断两者都不是最后一个位置的串,否则break),相同则存下来,否则就断了,则break
3、每一次得到的共同子串都和前一个比较长度,长则替换
代码实现
str1=input()
str2=input()
# 选出短的那条,用短的去匹配长的
str_short,str_long= (list(str2),list(str1)) if len(str1)>len(str2) else (list(str1),list(str2))
s1 = ''
for i in range(len(str_short)):
for k in range(len(str_long)):
s2 ='' # 每次匹配都要清空s2
y = k # 记住此时k的值,以便后面找到相同串时,顺序匹配下一个串是否相同
if str_short[i] == str_long[k]: #找到第一个相同的串,先记住
s2 = s2 + str_short[i]
for x in range(i,len(str_short)): #再找下一个是否相同
if x!= len(str_short)-1 and y!= len(str_long)-1: # 先判断都不是最后一个位置的串
if str_short[x+1]==str_long[y+1]: # 相同则存起来
s2 = s2 + str_short[x+1]
y = y + 1 # 继续匹配下一个
else : # 否则就是不同,跳出
break
else:
break
if len(s2)>len(s1): # 如果后面得到的共同子串比前面的长,则替换
s1 = s2
print(s1)
提交结果