求2个字符串的最长公共子串
最长公共子串(LCS,Longest Common Substring)
思考:
s1 = ‘abcdefg’
s2 = ‘defabcd’
方法一: 直接查找
思路:
最长公共子串一定出现在短的那个字符串里,如果用短的字符串中,先从最长字符开始,逐次减一,到长的那一个字符串中进行匹配.如果存在则说明已经找到,程序结束.
优化:
其实只要找到第一轮的公共子串的索引,最长公共子串也是从它开始的,所以以后的轮次都从这些索引位置开始,
可以减少比较的次数。
str1 = 'abcdefgg好好学习denf'
str2 = 'denf好好学习abcd'
import re
def str_int(s1,s2):
if len(s1) > len(s2):
s1,s2 = s2,s1
print(s1,s2)
length = len(s1)
result = []
for step in range(length,0 ,-1):
for start in range(0,length-step+1):
flag = True
tmp = s1[start:start+step]
if s2.find(tmp)>-1 :# 第一次找到,后面要接着找
result.append(