题解 | #公共子串计算#
公共子串计算
http://www.nowcoder.com/practice/98dc82c094e043ccb7e0570e5342dd1b
条件匹配皆可用堆栈知识解决
import re def stack_count(s1,s2): if len(s1) > len(s2): s1,s2 = s2,s1 stack=[] max_list=[] #栈弹出后用list记录下弹出的长度,最后用max(list)来获取最大公共字符串 for i in range(len(s1)): stack.append(s1[i]) for j in s1[i+1:]: stack.append(j) if not re.search("".join(stack),s2) : #注意:不能用表达式==none来判断,必须if not max_list.append(len(stack)-1) stack=[] max_list.append(len(stack)) if len(stack)==len(s1): print(len(s1)) return True #优化,如果从第一个字母开始遍历stack最大的值等于s1那必然最大值 else: stack=[] print(max(max_list)) return True while True: try: s1,s2 = input(),input() if len(s1) > len(s2): s1,s2 = s2,s1 stack_count(s1,s2) except: break