题解 | #查找两个字符串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要比较大小并做一次交换,这样才能全部通过。