题解 | #查找两个字符串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])

#题解#
全部评论

相关推荐

蚂蚁 基架java (n+6)*16 签字费若干
点赞 评论 收藏
分享
11-01 08:48
门头沟学院 C++
伤心的候选人在吵架:佬你不要的,能不能拿户口本证明过户给我。。球球了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务