当前位置: 首页 > 面试经验 >

【华为OD机试2023】查找重复代码(Python)

优质
小牛编辑
158浏览
2023-03-28

【华为OD机试2023】查找重复代码(Python)

题目描述:小明负责维护项目下的代码,需要查找出重复代码,用以支撑后续的代码优化,请你帮助小明找出重复的代码。重复代码查找方法:以字符串形式给定两行代码(字符串长度 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('')

 类似资料: