Admin

【备忘】Python取两字符串中的最大相同子串

矩阵取1斜线法

mark_posit_list = []


def get_line(start_x, start_y, matrix_list, string_1):
    # 遍历取1斜线
    if start_x >= len(matrix_list):
        return ''
    elif start_y >= len(matrix_list[start_x]):
        return ''
    elif matrix_list[start_x][start_y] != 1:
        return ''
    mark_posit_list.append((start_x, start_y))
    # print(string_1[start_x], start_x, start_y, matrix_list[start_x][start_y])
    return string_1[start_x] + get_line(start_x + 1, start_y + 1, matrix_list, string_1)


if __name__ == "__main__":
    string_1 = 'abcdef'
    string_2 = 'cbcdefdexgggabcde'
    matrix_list = []
    for idx1, char_1 in enumerate(string_1):
        matrix_list.append([])
        for idx2, char_2 in enumerate(string_2):
            flag = 1 if char_1 == char_2 else 0
            matrix_list[idx1].append(flag)
    print('matrix list')
    for line in matrix_list:
        print(line)
    # 取1斜线
    for x in range(len(string_1)):
        for y in range(len(string_2)):
            if (x, y) in mark_posit_list:
                continue
            line = get_line(x, y, matrix_list, string_1)
            if len(line) <= 4:
                continue
            else:
                print(line)