Python最大匹配

在Python中,"最大匹配"通常指的是在字元串中找到最長的相同子字元串,也稱為最長公共子字元串(Longest Common Substring)問題。這個問題與字元串匹配有關,但不是簡單的模式匹配,而是尋找兩個或多個字元串之間最長的相同部分。

下面是一個簡單的Python函式,用於找到兩個字元串之間的最長公共子字元串:

def longest_common_substring(str1, str2):
    # 創建一個二維數組來存儲匹配結果
    dp = [[0 for i in range(len(str2) + 1)] for j in range(len(str1) + 1)]

    # 初始化第一個字元串的第一個字元作為最長公共子字元串的開始
    for i in range(len(str1)):
        for j in range(len(str2)):
            if str1[i] == str2[j]:
                dp[i + 1][j + 1] = dp[i][j] + 1
            else:
                dp[i + 1][j + 1] = 0

    # 找到最長公共子字元串的長度
    max_length = dp[len(str1)][len(str2)]

    # 返回最長公共子字元串
    start_index1 = start_index2 = 0
    for i in range(len(str1)):
        for j in range(len(str2)):
            if dp[i + 1][j + 1] == max_length:
                start_index1 = i
                start_index2 = j
                break
    return str1[start_index1:start_index1 + max_length]

# 示例使用
str1 = "ABCDGH"
str2 = "AEDFHR"
print(longest_common_substring(str1, str2))

這個函式使用了一個動態規劃(Dynamic Programming)的方法來解決問題。它的時間複雜度是O(mn),其中m和n分別是兩個字元串的長度。空間複雜度也是O(mn),因為使用了二維數組來存儲匹配結果。

如果你需要在一個字元串中找到最長的相同子字元串,你可以使用類似的方法,但是只需要比較字元串與其自身。