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