题解 | #查找两个字符串a,b中的最长公共子串#
查找两个字符串a,b中的最长公共子串
https://www.nowcoder.com/practice/181a1a71c7574266ad07f9739f791506
遍历短的串s1,依次截取 短的串每个索引i,到其[len(s1),len(s1)-1,len(s1)-2,...,i]索引的串,是否在长串内。
在则不断更新最长子串即可。
注意:第二层遍历到i即可;且找到一个子串后即可break当前索引,节省时间。
def fun(): s1, s2 = input(), input() max_com_sub_s = '', s1, s2 = (s1, s2) if len(s1) < len(s2) else (s2, s1) # s1是短的 for i in range(len(s1)): # 遍历短的 for j in range(len(s1), i, -1): # 从末尾开始遍历,有子串时即可退出 if s1[i:j] in s2 and len(s1[i:j]) > len(max_com_sub_s): # 找到子串并且长度更大 max_com_sub_s = s1[i:j] # 替换最大子串 break # 找到子串后即使当前位置最大子串 print(max_com_sub_s) fun()