四指针法
str1 = '666python6666sdafagagsdgas' str2 = '3333python6' # 要求两个字符串中的相同部分,我们先用常规的思路实现,然后再用经典的四指针法 # 常规思路是我们将字符串中的每一块都切割出来然后与str1进行比较 def check(str1,str2): maxLenth = 0 result = '' # 将str2中的所有可能重合的字符进行切割 for start in range(len(str2)): for end in range(len(str2)): # 获取到每一次切割后的字符 cutting = str2[start:end+1] # 进行查找如果str1中也含有这个字符并且这个字符长度比之前的大那么重新赋值 if str1.find(cutting) != -1 and len(cutting) > maxLenth: maxLenth = len(cutting) result = cutting return result,maxLenth # print(check(str1,str2)) # result:('python6', 7) # 第二种四指针法,这是一种非常经典的算法 def PointerCheck(str1,str2): maxLenth = 0 result = '' # 将四个指针声明完毕 a = 0 b = 0 c = 0 d = 0 # 我们假设ab两个指针指向str1,假设cd两个指针指向str2 while 1: # 当ac指针指向的字符不相同时我们就要移动cd的指针进行再度匹配 if str1[a] != str2[c]: c += 1 d += 1 else: # 当ac相同时,我们就要移动bd的指针进行最大字符范围的匹配 while 1: # 当两个字符相同时,指针继续后移 if str1[b] == str2[d]: b += 1 d += 1 # 当匹配的字符大maxLenth时进行返回结果的重置 if len(str1[a:b]) > maxLenth: maxLenth = len(str1[a:b]) result = str1[a:b] # 当两个字符不相同时,我们移动a指针,并且还原c指针 else: a += 1 b = a + 1 c = 0 d = 1 break # 当bd指针超出范围是我们结束循环 if b >= len(str1) or d >= len(str2): break if c >= len(str2) or d >= len(str2): c= 0 d = 1 a += 1 b = a + 1 if a >= len(str1): break return result, maxLenth # 第一种算法是将str2的每种字符可能进行切割,而四指针法则是将str1的每种可能进行切割,然后利用指针进行对比 print(PointerCheck(str1,str2))