题解 | #查找两个字符串a,b中的最长公共子串#

查找两个字符串a,b中的最长公共子串

https://www.nowcoder.com/practice/181a1a71c7574266ad07f9739f791506

import sys
import difflib


items = []

for line in sys.stdin:
    a = line.strip()
    items.append(a)

a, b = items

if len(a) > len(b):
    b,a = a,b

def get_index(item:str, subitem:str):
    return item.index(subitem)

subs = ""
rets = set()

def reduce_subs(msubs, mb):
    while msubs != "":
        msubs = msubs[1:]
        if msubs in mb:
            return msubs
    return ""

for c_a in a:
    subs += c_a
    if subs in b:
        rets.add(subs)
    else:
        subs = reduce_subs(subs, b)
        if subs:
            rets.add(subs)

if subs in b:
    rets.add(subs)

max_length = max([len(it) for it in rets])
candidates = [it for it in rets if len(it) == max_length]
candidates.sort(key = lambda it: get_index(a, it))
print(candidates[0])

这份代码是在使用difflib之后的再次尝试,结果发现问题不在difflib那里,是a和b要比较大小并做一次交换,这样才能全部通过。

全部评论

相关推荐

09-12 11:55
已编辑
湖南工商大学 Java
那一天的Java_J...:这种一堆问题的,别去
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务