import itertools def matchSubstrings(s:str, ss:str, minlen:int=2, reverse:bool=False): if reverse: s, ss = ss, s ac = itertools.accumulate l = len(s) if minlen > l: return [] lll, pos = 0, 0 for i in range(l - minlen + 1): sss = [x for x in ac(s[i:])] sss.reverse() ll = len(sss) for j, x in enumerate(sss[:ll - minlen + 1]): if j > ll - lll and i < pos + lll: break if x in ss: lll = len(x) pos = i yield x break str1 = "我今天特别开心啊,因为今天是个好日子,我中了 500 万彩票" str2 = "今天不是个好日子,因为邻居中了 500 万彩票,我今天不开心" gg = matchSubstrings(str1, str2, 4) print(next(gg))