题目:
求两个字符串的最长公共子串
思路:
建立一个二维数组,保存连续位相同与否的状态,通过遍历循环判断,将最长匹配长度的子串和最长匹配长度返回输出结果。
代码实现:
def getSubstr(str1,str2):
lstr1 = len(str1)
lstr2 = len(str2)
record = [[0 for i in range(lstr2+1)] for j in range(lstr1+1)] # 多一位
maxNum = 0 # 最长匹配长度
p = 0 # 匹配的起始位置
for i in range(lstr1):
for j in range(lstr2):
if str1[i] == str2[j]:
# 相同则累加
record[i+1][j+1] = record[i][j] + 1
if record[i+1][j+1] >maxNum:
# 获取最大匹配长度
maxNum = record[i+1][j+1]
# 记录最大匹配长度的终止位置
p = i+1
return str1[p-maxNum:p],maxNum
if __name__ == '__main__':
# 灵活输入,转换为字符串类型
str1 = str(input())
str2 = str(input())
res = getSubstr(str1,str2)
print(res)
输入字符串以及运行结果:
面试时发现该题出现次数比较多,记录一下,有其他实现思路欢迎补充,有好建议评论区留言一起交流学习~