题解 | #公共子串计算#
公共子串计算
https://www.nowcoder.com/practice/98dc82c094e043ccb7e0570e5342dd1b
思路:滑块移动法。滑块长度初始为短串的长度,之后滑块长度单位递减。
①找到的第一个公共子串则为最长子串;②若无公共子串则输出0
s1 = input() s2 = input() if len(s1) > len(s2): # 始终将短串赋给s1 s1, s2 = s2, s1 k = len(s1) # 滑块长度初始为短串的长度 l = [] while k > 0: for i in range(len(s1) - k + 1): if s1[i:i+k] in s2: # 若找到最长公共子串,将其添加到列表l,并立即结束for循环 l.append(s1[i:i+k]) break if len(l): # 若l非空则返回元素长度,并结束while循环 print(len(l[0])) break k -= 1 # 滑块长度单位递减 else: # 最终没有公共子串输出0 print(0)