题解 | #查找两个字符串a,b中的最长公共子串#
查找两个字符串a,b中的最长公共子串
https://www.nowcoder.com/practice/181a1a71c7574266ad07f9739f791506
""" 1、通读题目,全局理解。精读题目,找到解题思路 找到2个字符串中的最长公共字串,如果有多个,输出短串先出现的那个 找到2个字符串中所有的公共字串, 找到短串, 遍历短字符串 当第一个等于a的时候, a有没有在长串中 ab有没有在长串中 abc有没有在长串中 一直到最后一个 在长字符串中,将 a 和 其长度1 ,放入字典中。如果字典中有a,就不用放入,没有则放入 当第二个等于b的时候, b bc bcd bcde 将字符串和长度,都放入字典中 max 找到长度最大那个values 当字典中的values = max的时候,将内容放到列表中,取第一个即可 2、找到思路的代码实现方式 debug的点:zifu = duan[i:j+1] 这里刚开始我写成了i+1,导致只有18个用例通过,本地debug后,直接就看出来了,很简单,主要是梳理思路 """ s1 = input() s2 = input() # 找到短串\长串 a = min(len(s1), len(s2)) duan = "" if len(s1) == a: duan = s1 else: duan = s2 b = max(len(s1), len(s2)) chang = "" if len(s1) == b: chang = s1 else: chang = s2 # 遍历短串 dic = {} for i in range(len(duan)): for j in range(i, len(duan)): zifu = duan[i:j+1] if zifu in chang: if zifu not in dic: dic[zifu] = len(zifu) # 当字典中的values = max的时候,将内容放到列表中,取第一个即可 c = max(dic.values()) d = [] for k,v in dic.items(): if v == c: d.append(k) print(d[0])
#题解#