📜  Python中的SequenceMatcher用于最长公共子串

📅  最后修改于: 2022-05-13 01:54:23.713000             🧑  作者: Mango

Python中的SequenceMatcher用于最长公共子串

给定两个字符串“X”和“Y”,打印最长的公共子字符串。

例子:

Input :  X = "GeeksforGeeks", 
         Y = "GeeksQuiz"
Output : Geeks

Input : X = "zxabcdezy", 
        Y = "yzabcdezx"
Output : abcdez

我们有解决此问题的现有解决方案,请参阅打印最长的公共子字符串链接。我们将使用 SequenceMatcher.find_longest_match() 方法在Python中解决问题。

SequenceMatcher.find_longest_match(aLow,aHigh,bLow,bHigh) 方法如何工作?

首先我们用两个输入字符串str1和str2初始化SequenceMatcher对象, find_longest_match(aLow,aHigh,bLow,bHigh)有4个参数aLow, bLow分别是第一个和第二个字符串的起始索引,aHigh, bHigh分别是第一个和第二个字符串的长度. find_longest_match() 返回命名元组 (i, j, k) 使得 a[i:i+k] 等于 b[j:j+k],如果没有块匹配,则返回 (aLow, bLow, 0)。

# Function to find Longest Common Sub-string
  
from difflib import SequenceMatcher
  
def longestSubstring(str1,str2):
  
     # initialize SequenceMatcher object with 
     # input string
     seqMatch = SequenceMatcher(None,str1,str2)
  
     # find match of longest sub-string
     # output will be like Match(a=0, b=0, size=5)
     match = seqMatch.find_longest_match(0, len(str1), 0, len(str2))
  
     # print longest substring
     if (match.size!=0):
          print (str1[match.a: match.a + match.size]) 
     else:
          print ('No longest common sub-string found')
  
# Driver program
if __name__ == "__main__":
    str1 = 'GeeksforGeeks'
    str2 = 'GeeksQuiz'
    longestSubstring(str1,str2)

输出:

Geeks