题目描述:小明负责维护项目下的代码,需要查找出重复代码,用以支撑后续的代码优化,请你帮助小明找出重复的代码。重复代码查找方法:以字符串形式给定两行代码(字符串长度 1 < length <= 100,由英文字母、数字和空格组成),找出两行代码中的最长公共子串。注: 如果不存在公共子串,返回空字符串
输入描述:
输入的参数text1, text2分别表示两行代码
输出描述:
输出任一最长公共子串
示例1
输入:
hello123world
hello123abc4
输出:
hello123
说明:
text1 = "hello123world", text2 = "hello123abc4", 最长的公共子串为 "hello123"
示例2
输入:
private_void_method
public_void_method
输出:
_void_method
说明:
text1 = "private_void_method", text2 = "public_void_method", 最长的公共子串为 "_void_method"
示例3
输入:
hiworld
hiweb
输出:
hiw
说明:
text1 = "hiworld", text2 = "hiweb", 最长的公共子串为 "hiw"
解题思路:
以两个字符串中短的那一个为目标,进行两层遍历,取得所有子串str,并判断str是否在长字符串中
如果辅助列表s为空,且str在长字符串中,则将str添加入s
如s不为空,且str在长字符串中,str的长度还比s[0]的长度长,则将str赋值给s[0]
输出时,如果s不为空,则说明有共同子串,输出s[0];如果s为空,说明无共同子串,输出空字符串
st1=input()
st2=input()
chang=max(st1,st2)
duan=min(st1,st2)
l=len(duan)
s=[]
for i in range(l):
for j in range(i+1,l):
if not s:
if duan[i:j+1] in chang:
s.append(duan[i:j+1])
else:
if duan[i:j+1] in chang and len(duan[i:j+1])>len(s[0]):
s[0]=duan[i:j+1]
if s:
print(s[0])
else:
print('')